在python3.x中组合列表
我有一个列表,例如在python3.x中组合列表,python,list,python-3.x,dictionary,Python,List,Python 3.x,Dictionary,我有一个列表,例如 [[0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0], [0, 0, 0,
[[0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0], [0, 0, 0, 0, 0, 0, 3]]
我想把它合并成一个整数列表
[0,1,0,2,3,2,0,3,0,2,3]
我找不到一个确切的方法来实现它
该模式是,如果列表中有除0以外的任何数字,则将其添加为找到的实际数字,或者将其输入为0。只需像这样迭代:
3>> [functools.reduce(operator.or_, x) for x in L]
[0, 1, 0, 2, 3, 2, 0, 3, 0, 2, 3]
new = [0 for i in range(len(old[0]))]
for a in old:
for b, c in enumerate(a):
new[b] += c
您的目标是将2d列表展平吗?如果是这样,下面代码段中的b就是您想要的:
a = [[1,2,3],[4,5,6],[7,8,9]]
b = [val for sublist in a for val in sublist]
假设您只得到全部零或一个非零数字,则在过滤所有0后,您可以调用
过滤器上的next
,默认值为next
l = [[0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0], [0, 0, 0, 0, 0, 0, 3]]
print([next(filter(None,sub),0) for sub in l] )
[0, 1, 0, 2, 3, 2, 0, 3, 0, 2, 3]
如果两个子列表在同一位置有一个非零的数字,会发生什么?我不知道如何“组合”它们?如果两个列表在同一索引中有数字,会发生什么情况?根据您的示例,第二个列表以1
开始,但结果以0
开始……您可以扩展组合这两个列表的规则吗?@sedavidw它实际上并不取决于值在第一个列表中的位置。我唯一的标准是查看列表是否全部为零,如果是,则仅在新列表中追加0,否则追加找到的实际值。(列表列表的内部索引)不重要如果输入[[0,0],[1,2]]会怎么样?预期输出是[0,1,2]还是[0,1](即,仅列表中的第一个非零数计数)?