Yu *_*hen 3 python list-comprehension python-3.x
在以下 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]
Run Code Online (Sandbox Code Playgroud)
我想将 的结果存储k+d在列表理解中,以便它可以在列表理解中引用。在 Python3 中可能吗?
我知道我们可以做到以下几点:
sums = []
for k in keyboards:
for d in drivers:
s = k + d
if s <= upper_limit:
sums.append(s)
Run Code Online (Sandbox Code Playgroud)
但我希望避免 append 的副作用操作。
只有for循环才能在列表推导式中分配新名称,因此如果您需要一个“本地”变量来引用计算,则需要找到添加额外循环的方法。
您可以在计算的单个元素元组上添加另一个循环k + d:
sums = [kd for k in keyboards for d in drivers for kd in (k + d,) if d <= upper_limit]
Run Code Online (Sandbox Code Playgroud)
或者您也可以使用生成器表达式:
sums = [kd for kd in (k + d for k in keyboards for d in drivers) if kd <= upper_limit]
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,您可以先将该表达式存储为单独的变量:
kd_calc = (k + d for k in keyboards for d in drivers)
sums = [kd for kd in kd_calc if kd <= upper_limit]
Run Code Online (Sandbox Code Playgroud)
演示:
>>> 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]
Run Code Online (Sandbox Code Playgroud)