我有两个列表:
list1 = [1,2,3]
并且
list2 = [4]
我需要将它们组合起来,以产生以下输出:
list3 = [[1,4],[2,4],[3,4]]
itertools
似乎没有一种方法可以实现这一点,zip
函数在第二个列表结束时结束。
我相信有一个一行代码的解决方案,但我在这里和谷歌上找到了太多类似但不完全相同的问题。
list2
的值和当前迭代的元素连接起来:list1 = [1,2,3]
list2 = [4]
new_list = [[a]+list2 for a in list1]
输出:
[[1, 4], [2, 4], [3, 4]]
map
的低级解决方案:final_list = map(lambda x:[x, list2[0]], list1)
输出:
[[1, 4], [2, 4], [3, 4]]
map
更快,但是当使用 lambda 函数时(如在此情况下),map
几乎总是更慢。我将编辑帖子以提到这一点。 - Ajax1234您也可以使用itertools izip_longest (py2)或itertools zip longest (py3):
import itertools
list(map(list,itertools.izip_longest([], list1, fillvalue=list2[0])))
[[4, 1], [4, 2], [4, 3]]
你需要第三种选择吗?
>>> list(map(list,zip(list2 * len(list1), list1)))
[[4, 1], [4, 2], [4, 3]]
itertools.cycle()
:>>> import itertools
>>> list1 = [1,2,3]
>>> list2 = [4]
>>> print([list(x) for x in zip(list1, itertools.cycle(list2))])
[[1, 4], [2, 4], [3, 4]]
print(list(map(lambda x:[x,list2[0]],list1)))
当数据为:
list1 = [1,2,3]
list2 = [4]
输出:
[[1, 4], [2, 4], [3, 4]]
正如有人指出的那样,这已经是给出的答案了,这是另一种解决方案:
list1 = [1,2,3]
list2 = [4]
print(list(zip(list1,list2*len(list1))))
输出:
[(1, 4), (2, 4), (3, 4)]