我正在开发一个程序,该程序将获取列表并返回包含相邻相同值的嵌套列表的列表。例如
的输入列表[1,2,4,5,5,7,6,6,6]
会返回
[1,2,4,[5,5],7,[6,6,6]]
我该如何编程一个函数来做到这一点?
答案 0 :(得分:7)
您可以使用itertools.groupby
将所有内容分组到相邻相同值的列表中,然后从嵌套列表中解开长度为1的列表:
from itertools import groupby
def group_adjacent(iterable):
lists = (list(g) for k, g in groupby(iterable))
return [subl[0] if len(subl) == 1 else subl for subl in lists]
group_adjacent([1,2,4,5,5,7,6,6,6])
# [1, 2, 4, [5, 5], 7, [6, 6, 6]]
答案 1 :(得分:2)
纯基本的python解决方案:
创建一个新列表并通过过去的跟踪将其添加到该列表中
new_list = []
temp_list = []
for i in old_list:
if temp_list and i == temp_list[-1]:
temp_list.append(i)
continue
if len(temp_list) == 1:
new_list.append(temp_list[0])
elif temp_list: # avoid first case.
new_list.append(temp_list)
temp_list = [i]
if len(temp_list) == 1:
new_list.append(temp_list[0])
else:
new_list.append(temp_list)
答案 2 :(得分:2)
仅用于循环的方法:
list = [1,2,2,2,3,4,4,4,4,4,4,5,6,7,8,8,8,8,8,9,9]
out = []
t = []
i = 0
first = True
for v in list:
n = ''
if (i+1) < len(list):
n = list[i+1]
if v == n:
t.append(v)
else:
if len(t) > 0:
t.append(v)
out.append(t)
else:
out.append(v)
t = []
i+=1
print(out)
输出:
[1,[2,2,2],3,[4,4,4,4,4,4],5,6,7,[8,8,8,8,8],[9 ,9]]