内联python中没有计数器吗?

当我尝试将计数器放入 Python 的内联循环中时,它会告诉我语法错误。显然这里它希望我为inot分配一个值k。


任何人都可以帮助重写内联循环吗?


aa = [2, 2, 1]

k = 0


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


print(b)


红颜莎娜
浏览 157回答 2
2回答

蓝山帝景

你似乎误解了你在做什么。这:[x for y in z]不是“内联 for 循环”。一个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 循环”——因为它只创建列表。您可能使用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循环中执行更复杂的事情,则此解决方案并不总是可行的- 而且它的效率也稍低,因为此解决方案实际上需要创建新列表,而这对您来说不是必需的试图实现。

慕桂英3389331

你可以len()像这样使用print(len([i for i in a if i != 2]))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python