>>> a = [1,2,3,4]
>>> b = [17,12,11,10]
>>> c = [-1,-4,5,9]
>>> list(map(lambda x,y,z:x+y+z, a,b,c))
[17, 10, 19, 23]
尝试过:
>>>[(x+y+z) for x in a for y in b for z in c]
但添加了这些列表元素的所有可能组合(不仅仅是先对后、后对后等等):
[17, 14, 23, 27, 12, 9, 18, 22, 11, 8, 17, 21, 10, 7, 16, 20, 18, 15, 24, 28, 13, 10, 19, 23, 12, 9, 18, 22, 11, 8, 17, 21, 19, 16, 25, 29, 14, 11, 20, 24, 13, 10, 19, 23, 12, 9, 18, 22, 20, 17, 26, 30, 15, 12, 21, 25, 14, 11, 20, 24, 13, 10, 19, 23]
这可能吗?谢谢。
最佳答案
您正在寻找 zip
,它“锁定步骤”驱动多个可迭代对象:
[x+y+z for x, y, z in zip(a, b, c)]
您最初的尝试产生了 Cartesian product三个名单中。存在 a helper function用于 itertools
模块中的笛卡尔积。
关于python - 我应该如何使用列表理解重写这个 map() 示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928941/