Python列表理解/三元运算符:If条件,然后追加递增值,否则追加非递增值
我在Python中有以下循环,我想将其转换为列表:Python列表理解/三元运算符:If条件,然后追加递增值,否则追加非递增值,python,python-3.x,Python,Python 3.x,我在Python中有以下循环,我想将其转换为列表: index = 0 for i in range(number): vec[i] = index if condition: index += 1 这应该使vec看起来像[0,0,0,1,1,1,1,2,3,3,3,4,5,6,6]。然而,我正在努力创建一个列表来理解这一点 我的尝试如下所示: y=[] index = 0 [index+=1 and y.append(index
index = 0
for i in range(number):
vec[i] = index
if condition:
index += 1
这应该使vec看起来像[0,0,0,1,1,1,1,2,3,3,3,4,5,6,6]。
然而,我正在努力创建一个列表来理解这一点
我的尝试如下所示:
y=[]
index = 0
[index+=1 and y.append(index) if condition else y.append(index) for _ in range(number)]
在iPython中,这甚至不执行。海象操作员可以为您完成这项工作。。。但我衷心同意@juanpa:不要。 这很难阅读,也很难调试
>>> index = 0
>>> [ index := (index+1 if i%3 == 1 else index) for i in range(10) ]
[0, 1, 1, 1, 2, 2, 2, 3, 3, 3]
我使用了
I%3==1
作为您的“条件”。您不应该使用列表理解作为副作用的开始,因为它们是用于表示声明性映射/过滤操作。有趣的是,我从未听说过walrus操作符。我得去看看。它有没有不难阅读或调试的用途?记住发帖的第一条规则:研究,研究,研究。别问我是否有这样的用途——查一查!是的,有。我认为,该操作符在Python3.8中是新的,并且有更好的用途。该名称来自于将操作符侧向转动,如:-)微笑。