如何在Python中保存列表理解中的重复计算?

2024-09-29 06:26:49 发布

您现在位置:Python中文网/ 问答频道 /正文

在以下Python代码中:

keyboards = [3, 1]
drivers = [5, 2, 8]
upper_limit = 10
sums = [k + d for k in keyboards for d in drivers if (k + d) <= upper_limit]

我想将k+d的结果存储在列表理解中,以便在列表理解中引用它。Python3有可能吗?在

我知道我们可以做以下事情:

^{pr2}$

但是我希望避免append的副作用操作。在


Tags: 代码in列表forif事情upperpython3
1条回答
网友
1楼 · 发布于 2024-09-29 06:26:49

在列表理解中,只有for循环可以分配给一个新名称,因此,如果需要一个“local”变量来引用计算,则需要找到添加额外循环的方法。在

您可以在计算k + d的单个元素元组上添加另一个循环:

sums = [kd for k in keyboards for d in drivers for kd in (k + d,) if d <= upper_limit]

也可以使用生成器表达式:

^{pr2}$

在后一种情况下,可以先将该表达式存储为单独的变量:

kd_calc = (k + d for k in keyboards for d in drivers)
sums = [kd for kd in kd_calc if kd <= upper_limit]

演示:

>>> keyboards = [3, 1]
>>> drivers = [5, 2, 8]
>>> upper_limit = 10
>>> [kd for k in keyboards for d in drivers for kd in (k + d,) if d <= upper_limit]
[8, 5, 11, 6, 3, 9]
>>> [kd for kd in (k + d for k in keyboards for d in drivers) if kd <= upper_limit]
[8, 5, 6, 3, 9]
>>> kd_calc = (k + d for k in keyboards for d in drivers)
>>> [kd for kd in kd_calc if kd <= upper_limit]
[8, 5, 6, 3, 9]

相关问题 更多 >