在Python中对多个列表中的每个元素求和
我有以下代码:在Python中对多个列表中的每个元素求和,python,list,Python,List,我有以下代码: list_1 = [11, 22] list_2 = [33, 44, 55 ,66] list_3 = [77, 88 ,99] 我想对列表中的每个元素求和。i、 e.11+33+77,11+33+88,…22+33+77,22+33+88…并将所有金额放入最终列表中 我有以下几行: list_1 = [11, 22] list_2 = [33, 44, 55 ,66] list_3 = [77, 88 ,99] result = [] for L_1 in list_1
list_1 = [11, 22]
list_2 = [33, 44, 55 ,66]
list_3 = [77, 88 ,99]
我想对列表中的每个元素求和。i、 e.11+33+77,11+33+88,…22+33+77,22+33+88…并将所有金额放入最终列表中
我有以下几行:
list_1 = [11, 22]
list_2 = [33, 44, 55 ,66]
list_3 = [77, 88 ,99]
result = []
for L_1 in list_1:
for L_2 in list_2:
for L_3 in list_3:
result.append(L_1 + L_2 + L_3)
print result # to output all elements
print list(set(result)) # to not showing duplicates
代码运行良好,但看起来很笨拙。如果有20个或更多的列表参与计算,那么它看起来一点都不好
你能告诉我一条更好的路吗 这种组合称为笛卡尔积。你可以使用它 输出
[121, 132, 143, 154, 165, 176, 187]
(1, 3, 5)
(1, 3, 6)
(1, 4, 5)
(1, 4, 6)
(2, 3, 5)
(2, 3, 6)
(2, 4, 5)
(2, 4, 6)
如果您事先不知道有多少列表,您甚至可以使用产品
:
all_lists = list_1, list_2, list_3
result = {sum(t) for t in product(*all_lists)}
product
迭代器从传递给它的iterables中生成项目的元组。然后,我们将这些元组传递给内置的sum
函数以执行加法
以下是产品
的“原始”输出:
from itertools import product
list_1 = [1, 2]
list_2 = [3, 4]
list_3 = [5, 6]
all_lists = list_1, list_2, list_3
for t in product(*all_lists):
print(t)
输出
[121, 132, 143, 154, 165, 176, 187]
(1, 3, 5)
(1, 3, 6)
(1, 4, 5)
(1, 4, 6)
(2, 3, 5)
(2, 3, 6)
(2, 4, 5)
(2, 4, 6)
这种组合称为笛卡尔积。你可以使用它 输出
[121, 132, 143, 154, 165, 176, 187]
(1, 3, 5)
(1, 3, 6)
(1, 4, 5)
(1, 4, 6)
(2, 3, 5)
(2, 3, 6)
(2, 4, 5)
(2, 4, 6)
如果您事先不知道有多少列表,您甚至可以使用产品
:
all_lists = list_1, list_2, list_3
result = {sum(t) for t in product(*all_lists)}
product
迭代器从传递给它的iterables中生成项目的元组。然后,我们将这些元组传递给内置的sum
函数以执行加法
以下是产品
的“原始”输出:
from itertools import product
list_1 = [1, 2]
list_2 = [3, 4]
list_3 = [5, 6]
all_lists = list_1, list_2, list_3
for t in product(*all_lists):
print(t)
输出
[121, 132, 143, 154, 165, 176, 187]
(1, 3, 5)
(1, 3, 6)
(1, 4, 5)
(1, 4, 6)
(2, 3, 5)
(2, 3, 6)
(2, 4, 5)
(2, 4, 6)
演示:
演示:
这给出了乘积,但询问者不想求和吗?@Windmill它也这样做了吗?抱歉,刚刚超出输出中给定的数值。@PM 2Ring,谢谢您的指导@Windmill结果中的项目数量很小,因为我们将它们收集在一组中以消除重复项。这给出了产品,但询问者不想将这些值相加吗?@Windmill它也这样做吗?抱歉,刚刚超出输出中给定的数值。@PM 2Ring,谢谢您的指导@Windmill结果中的项目数量很少,因为我们收集了一组项目以消除重复。请查看:@Transhuman,谢谢您的帮助。你的台词很好学。请继续回答好吗?@cᴏʟᴅsᴘᴇᴇᴅ - 谢谢,我误解了这个问题。请看下面的内容:@Transhuman,谢谢你的帮助。你的台词很好学。请继续回答好吗?@cᴏʟᴅsᴘᴇᴇᴅ - 谢谢,我误解了这个问题。另请参见
set(map(sum,product(*list)))
基于Op的要求。你的意思是他们“将所有总和放入最终列表”?@StefanPochmann,非常好!谢谢你的教诲。:)不,我指的是列表行中的列表(set(result))
。@cᴏʟᴅsᴘᴇᴇᴅ 这不在规定的“要求”中。另外,它的注释是“不要显示重复项”(强调我的解释)。这不是他们的结果
集合(映射(总和,产品(*列表))
基于Op的要求。你是说他们“将所有总和放入最终列表”?@StefanPochmann,非常好!谢谢你的教诲。:)不,我指的是列表行中的列表(set(result))
。@cᴏʟᴅsᴘᴇᴇᴅ 这不在规定的“要求”中。另外,它的注释是“不要显示重复项”(强调我的解释)。实际上,这不是他们的结果。