如何在Python中组合两个列表的每个元素?
我有一大堆列表,里面又包含了很多列表,我想把它们合并起来。它们的结构大概是这样的:
[[1,2,3,4,5], [6,7,8,9,0], [2,5,7,9,4], [4,7,8,43,6]...]
大约有20个这样的列表在一个列表里。现在我想把第一个列表和第二个列表合并,合并后的样子应该是这样的:
[[1,6], [2,7], [3,8], [4,9], [5,0]]
然后我还想把第一个列表和第三个列表再合并,一直这样合并到最后。接着,我想从第二个列表开始,和第三个、第四个……一直合并到最后一个(但第一个列表已经和第二个合并过了,所以不再重复)。我该怎么写代码来实现这个呢?
这是我目前写的代码:
xcols = 包含所有列表的那一列,就像我上面展示的那样
def MakeLists(xcols):
multilist = []
for i in xcols:
for j in xcols[index(i):]:
currentlist = map(list.__add__, i, j)
multilist.append(currentlist)
但是运行的时候出现了错误,可能是在map的部分,因为我不知道怎么先把每个元素转换成列表,然后再进行映射。任何帮助都会很棒。谢谢!
5 个回答
2
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们在写代码的时候犯了一些小错误,或者是因为我们对某些概念理解得不够清楚。
为了找到问题的根源,我们可以使用一些工具和方法来帮助我们调试代码。调试就是找出代码中哪里出错的过程。我们可以通过打印一些信息到屏幕上,或者使用调试工具来逐步查看代码的执行情况。
另外,阅读文档和参考资料也是很重要的。很多时候,问题的解决方案就在官方文档或者社区的讨论中。通过这些资源,我们可以学习到更多的知识,避免在同样的地方犯错。
总之,遇到问题时不要着急,冷静下来,仔细检查代码,利用好工具和资源,就能找到解决办法。
def foo(li):
for element in li[1:]:
for pair in zip(li[0], element):
yield pair
>>> from test import foo
>>> bar = [[1, 2, 3, 5, 6], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
>>> foo(bar)
<generator object foo at 0x10592df50>
>>> [e for e in foo(bar)]
[(1, 6), (2, 7), (3, 8), (5, 9), (6, 10), (1, 11), (2, 12), (3, 13), (5, 14), (6, 15)]
2
a=[[1,2,3,4,5],[6,7,8,9,0],[2,5,7,9,4],[4,7,8,43,6]]
i=0
for l in a[i:]:
for inner in a[i+1:]:
print [list(b) for b in zip(l, inner)]
i += 1
打印
[[1, 6], [2, 7], [3, 8], [4, 9], [5, 0]]
[[1, 2], [2, 5], [3, 7], [4, 9], [5, 4]]
[[1, 4], [2, 7], [3, 8], [4, 43], [5, 6]]
[[6, 2], [7, 5], [8, 7], [9, 9], [0, 4]]
[[6, 4], [7, 7], [8, 8], [9, 43], [0, 6]]
[[2, 4], [5, 7], [7, 8], [9, 43], [4, 6]]
7
这样怎么样:
>>> import itertools
>>> foo = [[1, 2, 3], [4, 5, 6], [7, 8, 8]]
>>> for p in itertools.permutations(foo, 2):
... print zip(*p)
...
[(1, 4), (2, 5), (3, 6)]
[(1, 7), (2, 8), (3, 8)]
[(4, 1), (5, 2), (6, 3)]
[(4, 7), (5, 8), (6, 8)]
[(7, 1), (8, 2), (8, 3)]
[(7, 4), (8, 5), (8, 6)]
补充说明:
如果你只是想把一个列表和它后面的元素压缩在一起,就像评论里的人所说的那样:
>>> import itertools
>>> for p in itertools.combinations(foo, 2):
... print zip(*p)
...
[(1, 4), (2, 5), (3, 6)]
[(1, 7), (2, 8), (3, 8)]
[(4, 7), (5, 8), (6, 8)]