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
循环中做更复杂的事情,这个解决方案并不总是可行的 - 而且它的效率也略低,因为这个解决方案需要实际创建新列表,这不是必需的为了你想要实现的目标。
当我试图将计数器放入 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
循环中做更复杂的事情,这个解决方案并不总是可行的 - 而且它的效率也略低,因为这个解决方案需要实际创建新列表,这不是必需的为了你想要实现的目标。