首页 > 解决方案 > 将两个变量分配给同一列表中的项目是访问这些项目并对其执行操作的最佳方式吗?

问题描述

说我有一个清单

l = [1,2,3]

我想将列表中的每个项目与列表中的所有其他项目相加。我可以这样做:

x = [(a, b) for a in l for b in l]
y = [(a + b) for a in l for b in l]

x = [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
y = [2, 3, 4, 3, 4, 5, 4, 5, 6]

将两个变量 (ab) 分配给同一列表 ( l) 中的项目是访问这些项目并对其执行操作的最佳方式吗?有一个更好的方法吗?

我查看了列表方法和函数,但没有找到。

更新

许多人推荐了 itertools 产品功能,所以我想在我标记为已回答之前包括时间:

mysetup = """
from itertools import product
l = [10, 15, 3, 7]
k = 17
"""
mycode = """
[i for i in product(l, repeat=2)]
"""

t = timeit.timeit(setup=mysetup, stmt=mycode, number=100000)
# 0.1505305


mysetup2 = """
l = [10, 15, 3, 7]
k = 17
"""
mycode2 = """
[(a, b) for a in l for b in l]
"""

t1 = timeit.timeit(setup=mysetup2, stmt=mycode2, number=100000)
# 0.1432976

标签: python

解决方案


Python提供了内置方法

from itertools import product
l = [1,2,3]

然后在一个步骤中使用列表理解生成总和,以提高效率

result= [sum(i) for i in product(l, repeat= 2) ]

#result=[2, 3, 4, 3, 4, 5, 4, 5, 6]

推荐阅读