嵌入式python中没有计数器?

时间:2018-11-13 20:09:01

标签: python loops inline

当我试图将计数器放入Python的内联循环时,它告诉我语法错误。显然,在这里它希望我为i而不是k分配一个值。

有人可以帮助重写内联循环吗?

aa = [2, 2, 1]
k = 0

b = [k += 1 if i != 2  for i in aa ] 

print(b)

2 个答案:

答案 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]))