res = [0,0,1,2,3]
res = res[next((i for i, x in enumerate(res) if x != 0), len(res)):] or [0]
# res => [1,2,3]
有人能解释一下res[next((i for i, x in enumerate(res) if x != 0), len(res)):] or [0]
在做什么吗?非常感谢。
单行代码的扩展版本是
index = len(res) # initialize the index
for i, r in enumerate(res): # find index to the first non-zero element
if r != 0:
index = i
break
# if there is no non-zero element, index will be pointed to len(res)
res = res[index:] # remove all non-zero leading element
if len(res) == 0:
res = [0] # if there is no non-zero element
其思想是从数组中删除所有前导的非零元素,如果所有元素都为零,则只保留一个。
即
[0,0,1]=>[1]
[1,2,0]=>[1,2,0]
[0,0,0]=>[0]
添加到@Burning Alcohol的答案中,
(i for i, x in enumerate(res) if x != 0)
创建一个迭代器,相当于iter([2,3,4])
next((i for i, x in enumerate(res) if x != 0)
将显示迭代器的第一个元素,因为迭代器是[2,3,4],所以第一个元素是2res[next((i for i, x in enumerate(res) if x != 0), len(res)):]
与res[2:]
相同;2结束";,这给了我们[1,2,3]
我刚开始学习Python,这真的很酷,谢谢yall!