python 如何展开列表列表并使用分隔符连接

hlswsv35  于 2023-02-07  发布在  Python
关注(0)|答案(4)|浏览(163)

如何用分隔符连接列表的列表?
例如:

[[1, 2], [3, 4, 5], [6, 7]]

带分隔符:

0

结果:

[1, 2, 0, 3, 4, 5, 0, 6, 7]
yyyllmsg

yyyllmsg1#

例如,列表存储在x中:

x=[[1,2], [3,4,5], [6,7]]

只需将reduce与lambda函数配合使用:

y=reduce(lambda a,b:a+[0]+b,x)

现在y

[1, 2, 0, 3, 4, 5, 0, 6, 7]

或者,您可以定义生成器函数:

def chainwithseperator(lis,sep):
  it=iter(lis)
  for item in it.next():
    yield item
  for sublis in it:
    yield sep
    for item in sublis:
      yield item

现致电:

y=list(chainwithseperator(x,0))

会给你带来同样的结果

s3fp2yjn

s3fp2yjn2#

你可以将tee作为一个可迭代对象,并且只在有下面的项时才生成分隔符。这里我们定义了一个名为joinlist的函数,它包含一个生成器辅助函数来生成相应的元素,然后使用chain.from_iterable返回所有这些元素的扁平列表:

from itertools import tee, chain

def joinlist(iterable, sep):
    def _yielder(iterable):
        fst, snd = tee(iterable)
        next(snd, [])
        while True:
            yield next(fst)
            if next(snd, None):
                yield [sep]
    return list(chain.from_iterable(_yielder(iterable)))

请务必注意,while True:的终止发生在yield next(fst)中,因为这将在某个点引发StopIteration,并将导致生成器退出。

示例

x = [[1,2]]
y = [[1, 2], [3,4,5]]
z = [[1, 2], [3,4,5], [6, 7]]

for item in (x, y, z):
    print item, '->', joinlist(item, 0)

# [[1, 2]] -> [1, 2]
# [[1, 2], [3, 4, 5]] -> [1, 2, 0, 3, 4, 5]
# [[1, 2], [3, 4, 5], [6, 7]] -> [1, 2, 0, 3, 4, 5, 0, 6, 7]
jmo0nnb3

jmo0nnb33#

我会这么做

l = [[1,2], [3,4,5], [6,7]]
result = [number for sublist in l for number in sublist+[0]][:-1]

最后一个[:-1]用于删除最后一个项目,即0

qpgpyjmq

qpgpyjmq4#

你可以使用它与Python列表extend()方法:

orig_list = [[1,2], [3,4,5], [6,7]]
out_list = []
for i in orig_list:
    out_list.extend(i + [0])

# To remove the last element '0'.  
print my_list[:-1]

相关问题