python - 将两个变量分配给同一列表中的项目是访问这些项目并对其执行操作的最佳方式吗?
问题描述
说我有一个清单
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]
将两个变量 (a
和b
) 分配给同一列表 ( 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提供了内置方法
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]
推荐阅读
- java - 当多个构造函数具有@Autowired 时,Spring 构造函数注入会引发错误
- javascript - 我们如何使用来自另一个 div 的链接使一个 DIV 可点击
- reactjs - 在地图内的if语句中调用函数反应
- arp - ARP IP 查找,什么也没带回来
- android - 从 Android 中的文件加载 SSL 证书
- python-3.x - 从一组选定的行中获取 NaN 值的索引
- mysql - MS Access 将查询转换为 MySQL 查询
- c++ - 为什么 CFile + CArchive 比 CI/O 流表现更好?
- cmake - 覆盖默认的 CMAKE C++ 编译器标志
- python - 重新安装软件包后修复“AttributeError:模块'requests'没有属性'methods'”错误?