Python 制作清单
Python making list
我是 python 中的超级 n00b。
我一直在努力寻找合适的解决方案。
这是列表,L = [0, 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 11, 12, 13, 14, 0, 0, 0, 18, 19, 20]
,每一项都指的是列表中的位置。
我想从上面的列表做一个列表,在列表里面显示更小的列表,每个元素代表系列的开始位置、系列的结束和元素的数量。这应该是 [[3, 6, 4], [11, 14, 4], [18, 20, 3]]
。我怎么能为此编写代码?以下是我到目前为止所做的。
target = []
target.append([])
target.append([])
target.append([])
L = [0,0,0,0,4,5,6,7,8,9,0,0,0,13,14,15,0,0,0,19,20,21]
for i in L :
if i == 0 :
L.remove(i)
continue
elif i != 0 :
startpoint = i
i = i * i
while i != 0 :
i += 1
continue
else :
j = i
endpoint = i - 1
break
target[0].append(startpoint)
target[1].append(endpoint)
target[2].append(j)
关于您的代码,一个错误是在以下 while
:
while i != 0 :
i += 1
一定不能增加i
需要增加的元素索引不是本身!找到none个零元素就继续追加!
但作为一种更 pythonic 的方式,您可以将 itertools.groupby
与列表理解一起使用:
>>> from itertools import groupby
>>> [[i[0],i[-1],len(i)] for i in [list(g) for _,g in groupby(L,key=lambda x:x!=0)]if i[0]!=0]
[[3, 6, 4], [11, 14, 4], [18, 20, 3]]
注意 groupby
returns 分组元素作为生成器 (g
) 并且当你想遍历它时你不会需要将其转换为 list
但在这种情况下,因为我们需要长度,所以我们必须将其转换为 list
直到我们可以使用 len
函数。
这是基于您的尝试的版本:
L=[0,0,0,3,4,5,6,0,0,0,0,11,12,13,14,0,0,0,18,19,20]
target = []
i = 0
while i < len(L):
if L[i] == 0 :
i += 1
continue
start = i
while i < len(L) and L[i] != 0:
i += 1
target.append((L[start],L[i-1],i-start))
我是 python 中的超级 n00b。
我一直在努力寻找合适的解决方案。
这是列表,L = [0, 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 11, 12, 13, 14, 0, 0, 0, 18, 19, 20]
,每一项都指的是列表中的位置。
我想从上面的列表做一个列表,在列表里面显示更小的列表,每个元素代表系列的开始位置、系列的结束和元素的数量。这应该是 [[3, 6, 4], [11, 14, 4], [18, 20, 3]]
。我怎么能为此编写代码?以下是我到目前为止所做的。
target = []
target.append([])
target.append([])
target.append([])
L = [0,0,0,0,4,5,6,7,8,9,0,0,0,13,14,15,0,0,0,19,20,21]
for i in L :
if i == 0 :
L.remove(i)
continue
elif i != 0 :
startpoint = i
i = i * i
while i != 0 :
i += 1
continue
else :
j = i
endpoint = i - 1
break
target[0].append(startpoint)
target[1].append(endpoint)
target[2].append(j)
关于您的代码,一个错误是在以下 while
:
while i != 0 :
i += 1
一定不能增加i
需要增加的元素索引不是本身!找到none个零元素就继续追加!
但作为一种更 pythonic 的方式,您可以将 itertools.groupby
与列表理解一起使用:
>>> from itertools import groupby
>>> [[i[0],i[-1],len(i)] for i in [list(g) for _,g in groupby(L,key=lambda x:x!=0)]if i[0]!=0]
[[3, 6, 4], [11, 14, 4], [18, 20, 3]]
注意 groupby
returns 分组元素作为生成器 (g
) 并且当你想遍历它时你不会需要将其转换为 list
但在这种情况下,因为我们需要长度,所以我们必须将其转换为 list
直到我们可以使用 len
函数。
这是基于您的尝试的版本:
L=[0,0,0,3,4,5,6,0,0,0,0,11,12,13,14,0,0,0,18,19,20]
target = []
i = 0
while i < len(L):
if L[i] == 0 :
i += 1
continue
start = i
while i < len(L) and L[i] != 0:
i += 1
target.append((L[start],L[i-1],i-start))