inline python 中没有计数器?

There is no counter in inline python?

当我试图将计数器放入 Python 的内联循环中时,它告诉我语法错误。显然这里它希望我给 i 赋值而不是 k.

谁能帮忙重写内联循环?

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

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

print(b)

你可以像这样使用len()

print(len([i for i in a if i != 2]))

你似乎误解了你在做什么。这个:

[x for y in z]

不是 "inline for loop"。 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]

这就是为什么它被称为 "list comprehension" 而不是 "inline for loop" - 因为它 只创建列表 。您可能会使用 for 循环的其他事情,例如迭代数字,您不能直接使用列表推导来完成。

对于您的特定问题,您尝试在列表理解中使用 k += 1。此操作不会 return 任何东西 - 它只是修改变量 k - 所以当 python 试图将其分配给列表项时,操作失败。如果你想用 k 计数,你应该使用常规的 for 循环:

for i in aa:
    if i != 2:
        k += 1

或使用列表理解间接衡量你想要的:

k += len([i for i in aa if i != 2])

在这里,我们使用列表推导来构建 aa 中每个元素 i 的列表,使得 i != 2,然后我们获取该列表中的元素数量并添加它到 k。由于此操作实际上会生成一个自己的列表,因此代码不会崩溃,并且具有相同的整体效果。如果你想在 for 循环中做更复杂的事情,这个解决方案并不总是可行的 - 而且它的效率也略低,因为这个解决方案需要实际创建新列表,这不是必需的为了你想要实现的目标。