Bri*_*ang -2 python loops inline
当我试图将计数器放入Python的内联循环时,它会告诉我语法错误.显然,在这里希望我的值赋给i没有k.
任何人都可以帮助重写内联循环吗?
aa = [2, 2, 1]
k = 0
b = [k += 1 if i != 2 for i in aa ]
print(b)
Run Code Online (Sandbox Code Playgroud)
你似乎误解了你在做什么.这个:
[x for y in z]
Run Code Online (Sandbox Code Playgroud)
不是"内联循环".一个for循环可以做任何事情,任何迭代迭代对象上.其中一个东西for回路可以做的就是创建一个项目列表:
my_list = []
for i in other_list:
if condition_is_met:
my_list.append(i)
Run Code Online (Sandbox Code Playgroud)
列表解析占地面积只有这个用例一的for循环:
my_list = [i for i in other_list if condition_is_met]
Run Code Online (Sandbox Code Playgroud)
这就是为什么它被称为"列表理解"而不是"内联循环" - 因为它只创建列表.你可以使用for循环的其他东西,比如迭代一个数字,你不能直接使用列表理解来做.
对于您的特定问题,您尝试使用k += 1列表解析.此操作不返回任何内容 - 它只是修改变量k- 因此当python尝试将其分配给列表项时,操作将失败.如果你想要计数k,你应该只使用一个常规for循环:
for i in aa:
if i != 2:
k += 1
Run Code Online (Sandbox Code Playgroud)
或使用列表理解来间接衡量你想要的东西:
k += len([i for i in aa if i != 2])
Run Code Online (Sandbox Code Playgroud)
在这里,我们用一个列表理解来构建每一个元素的列表i中aa这样i != 2,那么我们就在该列表中元素的个数,并添加它k.由于此操作实际上会生成自己的列表,因此代码不会崩溃,并且它将具有相同的整体效果.如果你想在for循环中做更复杂的事情,这个解决方案并不总是可行的- 而且它的效率也稍微低一些,因为这个解决方案需要实际创建新的列表,这对你来说不是必需的.试图实现.