请帮助解释这个删除前导零的代码(EPI Python)


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的答案中,

  1. (i for i, x in enumerate(res) if x != 0)创建一个迭代器,相当于iter([2,3,4])
  2. next((i for i, x in enumerate(res) if x != 0)将显示迭代器的第一个元素,因为迭代器是[2,3,4],所以第一个元素是2
  3. res[next((i for i, x in enumerate(res) if x != 0), len(res)):]res[2:]相同;2结束";,这给了我们[1,2,3]

我刚开始学习Python,这真的很酷,谢谢yall!

最新更新