如何在 python 的列表理解中使用赋值操作并将以下迭代代码转换为它?
How can I use assignment operation in list comprehension in python and convert following iterative code into it?
我写了复杂度为 O(n/2) 的反向列表代码,但我想知道如何将这段代码实现到列表理解中,以了解列表理解中的赋值操作。
word = list("overflow")
length = len(word)
for i in range(length//2):
word[i] , word[(length-1)-i] = word[(length-1)-i] , word[i]
print(word)
我做了一些与我的解决方案相关的研究,但我发现 := 这个运算符并尝试但没有用。
word = list("overflow")
length = len(word)
word = [ word[i],word[(length-1)-i] := word[(length-1)-i] ,word[i] for i in range(length//2) ]
print(word)
列表理解用于生成列表,而不是修改现有列表。如果您想修改列表,请使用 for 循环,因为这就是它们的用途。
你可以这样做兄弟
def Reverse(lst):
return [ele for ele in reversed(lst)]
print(Reverse("overflow")
return
['w', 'o', 'l', 'f', 'r', 'e', 'v', 'o']
我认为这是你需要的
首先,您不应该使用列表推导来处理副作用。列表理解用于表达 功能,mapping/filtering 对任意可迭代对象的操作以创建新列表 .
此外,赋值表达式explicitly aren't allowed用于项目赋值(a[k] = b
),仅对名称进行简单赋值(a = b
)。所以你可以只使用一个函数来使用赋值语句:
In [1]: def _reverse_helper(word, i):
...: length = len(word)
...: word[i] , word[(length-1)-i] = word[(length-1)-i] , word[i]
...:
In [2]: word = list("overflow")
...:
现在,再次将列表推导的结果重新分配给 word
没有任何意义,因为 您正在使用列表推导来解决副作用。所以,做这样的事情最接近你原来的实现:
In [3]: [_reverse_helper(word, i) for i in range(len(word)//2)]
Out[3]: [None, None, None, None]
In [4]: word
Out[4]: ['w', 'o', 'l', 'f', 'r', 'e', 'v', 'o']
这个实际上非常接近 (Try it online!):
[0 for i in range(length//2) for word[i], word[~i] in [(word[~i], word[i])]]
但是正如大家已经说过的那样,不要使用列表组合来解决它的副作用。
我写了复杂度为 O(n/2) 的反向列表代码,但我想知道如何将这段代码实现到列表理解中,以了解列表理解中的赋值操作。
word = list("overflow")
length = len(word)
for i in range(length//2):
word[i] , word[(length-1)-i] = word[(length-1)-i] , word[i]
print(word)
我做了一些与我的解决方案相关的研究,但我发现 := 这个运算符并尝试但没有用。
word = list("overflow")
length = len(word)
word = [ word[i],word[(length-1)-i] := word[(length-1)-i] ,word[i] for i in range(length//2) ]
print(word)
列表理解用于生成列表,而不是修改现有列表。如果您想修改列表,请使用 for 循环,因为这就是它们的用途。 你可以这样做兄弟
def Reverse(lst):
return [ele for ele in reversed(lst)]
print(Reverse("overflow")
return
['w', 'o', 'l', 'f', 'r', 'e', 'v', 'o']
我认为这是你需要的
首先,您不应该使用列表推导来处理副作用。列表理解用于表达 功能,mapping/filtering 对任意可迭代对象的操作以创建新列表 .
此外,赋值表达式explicitly aren't allowed用于项目赋值(a[k] = b
),仅对名称进行简单赋值(a = b
)。所以你可以只使用一个函数来使用赋值语句:
In [1]: def _reverse_helper(word, i):
...: length = len(word)
...: word[i] , word[(length-1)-i] = word[(length-1)-i] , word[i]
...:
In [2]: word = list("overflow")
...:
现在,再次将列表推导的结果重新分配给 word
没有任何意义,因为 您正在使用列表推导来解决副作用。所以,做这样的事情最接近你原来的实现:
In [3]: [_reverse_helper(word, i) for i in range(len(word)//2)]
Out[3]: [None, None, None, None]
In [4]: word
Out[4]: ['w', 'o', 'l', 'f', 'r', 'e', 'v', 'o']
这个实际上非常接近 (Try it online!):
[0 for i in range(length//2) for word[i], word[~i] in [(word[~i], word[i])]]
但是正如大家已经说过的那样,不要使用列表组合来解决它的副作用。