如何基于索引python创建值列表

时间:2019-06-25 10:37:58

标签: python python-2.7

我有一个列表

输入: 值= [1,2,2,1,1,3,1,3,4,4,5,5,4,6,6]

预期输出:

[[1,2,3,1,1,3,1],[3],[4,4,5,5,4],[6,6]]

说明:

1)一旦我遍历值列表的第一个元素,我们的1个索引就是 [0 3 4 6]。我想将索引的开始和结束编号(例如[value [0:6])存储到新列表中,并从现有列表中删除,看起来像value = [3,4,4,5,5,4,6,6 ]

2)一旦对值进行迭代,下一个输入将是3,值3的索引是[0],将其存储在列表中,如下所示

我尝试了几行代码

1)我用numpy遍历了具有索引和值的列表,我发现索引存储在表中

import numpy as np
final_list=[]
top_list=[1,2,2,1,1,3,1,3,4,4,5,5,4,6,6]

matched_input=[]
for i,j in enumerate(top_list):
    if(len(matched_input)==0):
        values = np.array(top_list)
        matched_input= np.where(j == values)[0]
        matched_input=np.array(matched_input).tolist()
        final_list.append(top_list[matched_input[0]:matched_input[-1]+1])
        #print matched_input
    elif(len(matched_input)>0 and i not in range(matched_input[-1]+1)):
        values= np.array(top_list[matched_input[-1]+1:])
        matched_input_updated= np.where(j == values)[0]
        matched_input_updated=np.array(matched_input_updated).tolist()
        final_list.append(top_list[matched_input_updated[0]:matched_input_updated[-1]+1])

3 个答案:

答案 0 :(得分:3)

尝试一下:

input = [1, 2, 2, 1, 1, 3, 1, 3, 4, 4, 5, 5, 4, 6, 6]

result = []
while len(input) > 0:  # can be just while input
    first_element = input[0]
    last_index_of_first_element = len(input) - (input[::-1].index(first_element) + 1)
    result.append(input[:last_index_of_first_element + 1])
    input = input[last_index_of_first_element + 1:]

print(result)

输出:

  

[[1、2、2、1、1、3、1],[3],[4、4、5、5、4],[6、6]]

基本上,只要有输入,我就会获取第一个元素,然后找到它的最后一个索引(通过反转列表,找到第一个索引,并从len中减去),然后使用切片来提取正确的子列表并追加到结果中。

答案 1 :(得分:2)

the other answer的轻微变化,而无需修改输入列表:

value = [1, 2, 2, 1, 1, 3, 1, 3, 4, 4, 5, 5, 4, 6, 6]
next_idx = 0
value_rev = value[::-1]
result = []
while next_idx < len(value):
    prev_idx = next_idx
    next_idx = len(value) - value_rev.index(value[prev_idx])
    result.append(value[prev_idx:next_idx])
print(result)
# [[1, 2, 2, 1, 1, 3, 1], [3], [4, 4, 5, 5, 4], [6, 6]]

答案 2 :(得分:0)

from collections import defaultdict

value = [1,2,2,1,1,3,1,3,4,4,5,5,4,6,6]
d = defaultdict(list)
[d[v].append(i) for i, v in enumerate(value)]

i, out = 0, []
while i < len(value):
    i2 = d[value[i]][-1]
    out.append(value[i:i2+1])
    i = i2 + 1

print(out)

打印:

[[1, 2, 2, 1, 1, 3, 1], [3], [4, 4, 5, 5, 4], [6, 6]]