我有一个包含整数的列表,我想提取基数的某些元素(在前一个数字中),并将位置增加到下一个数字。我想循环执行此操作。
但是列表中的数字将一直更改。
这是我的列表
data = [3, 119, 119, 119, 10, 103, 111, 111, 103, 108, 101, 97, 112,
105, 115, 3, 99, 111, 109, 0]
因此,我有第一个数字3,然后我想提取下三个数字119 119 119,在这三个数字之后我有数字10,基于数字10,我想提取下一个十个位置清单103、111、111、103、108、101、97、112、105、115,即我拥有数字3,并根据该数字提取下三个位置99、111、109,当我找到最后一个数字0程序停止。
这是我的尝试
while True:
index1 = 0
index2 = 1
value = data[index1:index2]
index1 = value[0]
index2 = value[0] + 1
print(value)
if value == 0:
break
答案 0 :(得分:2)
您可以尝试使用itertools.islice
:
from itertools import islice
data = [3, 119, 119, 119, 10, 103, 111, 111, 103, 108, 101, 97, 112, 105, 115, 3, 99, 111, 109, 0]
data_iter = iter(data)
for i in data_iter:
if i == 0:
break
print(list(islice(data_iter, i)))
输出:
[119, 119, 119]
[103, 111, 111, 103, 108, 101, 97, 112, 105, 115]
[99, 111, 109]
如果要将其作为列表,只需进行以下修改:
from itertools import islice
data = [3, 119, 119, 119, 10, 103, 111, 111, 103, 108, 101, 97, 112, 105, 115, 3, 99, 111, 109, 0]
result = []
data_iter = iter(data)
for i in data_iter:
if i == 0:
break
result.append(list(islice(data_iter, i)))
如果需要,您甚至可以将其理解为列表:
data_iter = iter(data)
result = [list(islice(data_iter, i)) for i in data_iter if i != 0]
答案 1 :(得分:2)
您可以走过data
data = [3, 119, 119, 119, 10, 103, 111, 111, 103, 108, 101, 97, 112, 105, 115,
3, 99, 111, 109, 0]
part = []
skip = 0
for idx,val in enumerate(data):
if skip == 0:
part.append(data[idx+1:idx+1+val])
skip = val
else:
skip -= 1
if not part[-1]:
part.pop()
print(part)
输出:
[[119, 119, 119],
[103, 111, 111, 103, 108, 101, 97, 112, 105, 115],
[99, 111, 109]]
Doku: