2 回答
TA贡献1843条经验 获得超7个赞
你似乎误解了你在做什么。这:
[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循环中执行更复杂的事情,则此解决方案并不总是可行的- 而且它的效率也稍低,因为此解决方案实际上需要创建新列表,而这对您来说不是必需的试图实现。
添加回答
举报