为了账号安全,请及时绑定邮箱和手机立即绑定

内联python中没有计数器吗?

内联python中没有计数器吗?

红颜莎娜 2021-08-17 10:43:30
当我尝试将计数器放入 Python 的内联循环中时,它会告诉我语法错误。显然这里它希望我为inot分配一个值k。任何人都可以帮助重写内联循环吗?aa = [2, 2, 1]k = 0b = [k += 1 if i != 2  for i in aa ] print(b)
查看完整描述

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循环中执行更复杂的事情,则此解决方案并不总是可行的- 而且它的效率也稍低,因为此解决方案实际上需要创建新列表,而这对您来说不是必需的试图实现。


查看完整回答
反对 回复 2021-08-17
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

你可以len()像这样使用

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


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信