如何用分隔符连接列表的列表?例如:
[[1, 2], [3, 4, 5], [6, 7]]
带分隔符:
0
结果:
[1, 2, 0, 3, 4, 5, 0, 6, 7]
yyyllmsg1#
例如,列表存储在x中:
x
x=[[1,2], [3,4,5], [6,7]]
只需将reduce与lambda函数配合使用:
reduce
y=reduce(lambda a,b:a+[0]+b,x)
现在y是
y
或者,您可以定义生成器函数:
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))
会给你带来同样的结果
s3fp2yjn2#
你可以将tee作为一个可迭代对象,并且只在有下面的项时才生成分隔符。这里我们定义了一个名为joinlist的函数,它包含一个生成器辅助函数来生成相应的元素,然后使用chain.from_iterable返回所有这些元素的扁平列表:
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,并将导致生成器退出。
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]
jmo0nnb33#
我会这么做
l = [[1,2], [3,4,5], [6,7]] result = [number for sublist in l for number in sublist+[0]][:-1]
最后一个[:-1]用于删除最后一个项目,即0。
[:-1]
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]
4条答案
按热度按时间yyyllmsg1#
例如,列表存储在
x
中:只需将
reduce
与lambda函数配合使用:现在
y
是或者,您可以定义生成器函数:
现致电:
会给你带来同样的结果
s3fp2yjn2#
你可以将
tee
作为一个可迭代对象,并且只在有下面的项时才生成分隔符。这里我们定义了一个名为joinlist
的函数,它包含一个生成器辅助函数来生成相应的元素,然后使用chain.from_iterable
返回所有这些元素的扁平列表:请务必注意,
while True:
的终止发生在yield next(fst)
中,因为这将在某个点引发StopIteration
,并将导致生成器退出。示例:
jmo0nnb33#
我会这么做
最后一个
[:-1]
用于删除最后一个项目,即0
。qpgpyjmq4#
你可以使用它与Python列表extend()方法: