如何从分析python之前的值的列表中获取某个值?

时间:2019-01-27 18:59:51

标签: python python-3.x list

我有一个包含整数的列表,我想提取基数的某些元素(在前一个数字中),并将位置增加到下一个数字。我想循环执行此操作。

但是列表中的数字将一直更改。

这是我的列表

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

2 个答案:

答案 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: