我正在尝试学习整洁的 pythonic 做事方式,并且想知道为什么我的 for 循环不能以这种方式重构:
q = [1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5]
vm = [-1, -1, -1, -1]
for v in vm:
if v in q:
p.append(q.index(v))
else:
p.append(99999)
vm[p.index(max(p))] = i
我尝试将 for 循环替换为:
[p.append(q.index(v)) if v in q else p.append(99999) for v in vm]
但它不起作用。 for v in vm:
循环逐出 vm
中的数字,基于下一个数字出现在 q
中。
原文由 Will 发布,翻译遵循 CC BY-SA 4.0 许可协议
您使用的是 Python 中的 列表理解,而不是内联 for 循环(即使它类似于一个)。您可以像这样将循环编写为列表推导式:
使用列表理解时,您不要调用
list.append
因为列表是根据理解本身构建的。列表中的每一项都是for
关键字左侧的表达式返回的内容,在本例中为q.index(v) if v in q else 99999
。顺便说一句,如果你确实在理解中使用list.append
,那么你将得到一个None
值的列表,因为这就是append
方法总是返回的值。