我有一个列表
输入: 值= [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])
答案 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]]