当我试图将计数器放入Python的内联循环时,它告诉我语法错误。显然,在这里它希望我为i
而不是k
分配一个值。
有人可以帮助重写内联循环吗?
aa = [2, 2, 1]
k = 0
b = [k += 1 if i != 2 for i in aa ]
print(b)
答案 0 :(得分:6)
您似乎误解了自己在做什么。这个:
[x for y in z]
不是“内联循环”。 for
循环可以做任何事情,可以对任何可迭代对象进行迭代。 for
循环可以做的一件事就是创建一个项目列表:
my_list = []
for i in other_list:
if condition_is_met:
my_list.append(i)
列表理解仅涵盖for
循环的此用例:
my_list = [i for i in other_list if condition_is_met]
这就是为什么它被称为“列表理解”而不是“内联循环”的原因-因为它仅创建列表。您可能会使用for
循环进行其他操作,例如迭代数字,不能直接使用列表推导来完成。
对于您的特定问题,您尝试在列表理解中使用k += 1
。此操作不返回任何内容-只是修改了变量k
-因此,当python尝试将其分配给列表项时,该操作将失败。如果您想使用k
进行计数,则应该只使用常规的for
循环:
for i in aa:
if i != 2:
k += 1
或使用列表推导间接 测量您想要的内容:
k += len([i for i in aa if i != 2])
在这里,我们使用列表推导来构造i
中每个元素aa
的列表,使得i != 2
,然后取该列表中的元素数量并将其添加到k
。由于此操作实际上会产生自己的列表,因此代码不会崩溃,并且具有相同的总体效果。如果您想在for
循环中执行更复杂的操作,则此解决方案并不总是可行的-而且效率也稍低,因为此解决方案需要实际创建不必要的新列表为您要实现的目标。
答案 1 :(得分:1)
您可以像这样使用len()
print(len([i for i in a if i != 2]))