例如:
n = 0
i = [n=n+1 for x in range(1,(12*8)+1) if x % 2 == 0]
这只是一个愚蠢的问题,我对此没有任何实际用处。我可以使用for或while循环来实现类似的东西。如果可能,我只是感兴趣。 (假设它不是哈哈。)
答案 0 :(得分:3)
您无法在列表理解机构中进行分配。语言规范仅允许expressions。但是,这意味着您可以调用具有副作用的方法。例如,您可以调用list.append
来修改其他列表,例如
>>> lst = []
>>> [lst.append(i) for i in range(5)]
[None, None, None, None, None]
>>> lst
[0, 1, 2, 3, 4]
但这很少有用,而且大多数时候最终都会出现更混乱的表达方式。建议将其拆分为循环标准;这也避免了生成列表的开销。
答案 1 :(得分:0)
不完全是。在Python中,表达式不能分配,并且赋值不作为值。因此,您的代码会产生语法错误。
如果您只对n
感兴趣,可以做些什么:
from collections import Counter
n = Counter(True for x in range(1, (12*8)+1) if x % 2 == 0)[True]
如果您只对i
感兴趣,请使用@ poke的答案:
i = []
[i.append(x) for x in range(1, (12*8)+1) if x % 2 == 0]
i
那就是说,表达不必是无副作用的。如果您同时需要i
和n
,则可以执行以下操作:
class Count:
def __init__(self, value=0):
self._value = value
@property
def incr(self):
self._value += 1
return self._value
def __int__(self):
return self._value
n = Count(0)
i = [n.incr for x in range(1, (12*8) + 1) if x % 2 == 0]
n = int(n)
答案 2 :(得分:0)
我参加聚会已经很晚了,但我遇到了类似的编码问题(在 O(n) 中从另一个数组中获取最大子数组,所以我希望一次传递新数组及其总数,而不是使用sum),您可以通过定义自定义函数:
n = 0
def inc_n(x):
global n
n += 1
return x
i = [inc_n(x) for x in range(1,(12*8)+1) if x % 2 == 0]