首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中保存列表理解中的重复计算?

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

Stack Overflow用户
提问于 2017-07-09 01:19:44
回答 1查看 647关注 0票数 3

在以下Python代码中:

代码语言:javascript
复制
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中是可能的吗?

我知道我们可以做到以下几点:

代码语言:javascript
复制
sums = []
for k in keyboards:
    for d in drivers:
        s = k + d
        if s <= upper_limit:
            sums.append(s)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-09 01:22:48

在列表理解中,只有for循环可以为新名称赋值,所以如果你需要一个“局部”变量来引用一个计算,你需要想办法添加一个额外的循环。

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

代码语言:javascript
复制
sums = [kd for k in keyboards for d in drivers for kd in (k + d,) if d <= upper_limit]

或者,您也可以使用生成器表达式:

代码语言:javascript
复制
sums = [kd for kd in (k + d for k in keyboards for d in drivers) if kd <= upper_limit]

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

代码语言:javascript
复制
kd_calc = (k + d for k in keyboards for d in drivers)
sums = [kd for kd in kd_calc if kd <= upper_limit]

演示:

代码语言:javascript
复制
>>> 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]
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44988861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档