Python 是否可以在列表中更改外部变量?
例如:Python 是否可以在列表中更改外部变量?,python,python-2.7,Python,Python 2.7,例如: n = 0 i = [n=n+1 for x in range(1,(12*8)+1) if x % 2 == 0] 这只是一个愚蠢的问题,我没有任何实际用途。我可以使用for或while循环来实现类似的功能。我只是想知道这是否可行。(假设不是哈哈。)不完全是。在Python中,表达式不能赋值,赋值也不能作为值。因此,代码会产生语法错误 如果您只对n感兴趣,您可以做什么: from collections import Counter n = Counter(True for x i
n = 0
i = [n=n+1 for x in range(1,(12*8)+1) if x % 2 == 0]
这只是一个愚蠢的问题,我没有任何实际用途。我可以使用for或while循环来实现类似的功能。我只是想知道这是否可行。(假设不是哈哈。)不完全是。在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)
不完全是。在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)
不完全是。在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)
不完全是。在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)
不能在列表正文中进行赋值。语言规范仅允许。但是,这意味着您可以调用具有副作用的方法。例如,您可以调用
list.append
来修改不同的列表,例如
>>> lst = []
>>> [lst.append(i) for i in range(5)]
[None, None, None, None, None]
>>> lst
[0, 1, 2, 3, 4]
但这很少有用,而且大多数情况下会以一个更令人困惑的表达结束。更推荐的做法是将其拆分为一个标准for循环;这也避免了生成列表的开销。您不能在列表正文中进行赋值。语言规范仅允许。但是,这意味着您可以调用具有副作用的方法。例如,您可以调用
list.append
来修改不同的列表,例如
>>> lst = []
>>> [lst.append(i) for i in range(5)]
[None, None, None, None, None]
>>> lst
[0, 1, 2, 3, 4]
但这很少有用,而且大多数情况下会以一个更令人困惑的表达结束。更推荐的做法是将其拆分为一个标准for循环;这也避免了生成列表的开销。您不能在列表正文中进行赋值。语言规范仅允许。但是,这意味着您可以调用具有副作用的方法。例如,您可以调用
list.append
来修改不同的列表,例如
>>> lst = []
>>> [lst.append(i) for i in range(5)]
[None, None, None, None, None]
>>> lst
[0, 1, 2, 3, 4]
但这很少有用,而且大多数情况下会以一个更令人困惑的表达结束。更推荐的做法是将其拆分为一个标准for循环;这也避免了生成列表的开销。您不能在列表正文中进行赋值。语言规范仅允许。但是,这意味着您可以调用具有副作用的方法。例如,您可以调用
list.append
来修改不同的列表,例如
>>> lst = []
>>> [lst.append(i) for i in range(5)]
[None, None, None, None, None]
>>> lst
[0, 1, 2, 3, 4]
但这很少有用,而且大多数情况下会以一个更令人困惑的表达结束。更推荐的做法是将其拆分为一个标准for循环;这也避免了生成列表的开销。我来晚了,但我遇到了一个类似的编码问题(在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]
我参加聚会已经很晚了,但我遇到了一个类似的编码问题(在O(n)中从另一个数组中获取一个max子数组,所以我希望新数组和它的总数都在一次传递中,而不是使用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]
我参加聚会已经很晚了,但我遇到了一个类似的编码问题(在O(n)中从另一个数组中获取一个max子数组,所以我希望新数组和它的总数都在一次传递中,而不是使用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]
我参加聚会已经很晚了,但我遇到了一个类似的编码问题(在O(n)中从另一个数组中获取一个max子数组,所以我希望新数组和它的总数都在一次传递中,而不是使用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]
预期的输出是什么。。。。我有点困惑……你试过了吗?它出错了吗?他的范围表达式很难举例说明,但我假设(将其替换为
range(1,5)
),OP希望I
为[1,2,3,4];和n
为4。预期的输出是什么。。。。我有点困惑……你试过了吗?它出错了吗?他的范围表达式很难举例说明,但我假设(将其替换为range(1,5)
),OP希望I
为[1,2,3,4];和n
为4。预期的输出是什么。。。。我有点困惑……你试过了吗?它出错了吗?他的范围表达式很难举例说明,但我假设(将其替换为range(1,5)
),OP希望I
为[1,2,3,4];和n
为4。预期的输出是什么。。。。我有点困惑……你试过了吗?它出错了吗?他的范围表达式很难举例说明,但我假设(将其替换为range(1,5)
),OP希望I
为[1,2,3]