Python创建嵌套列表

时间:2018-10-24 21:32:39

标签: python python-3.x

我正在开发一个程序,该程序将获取列表并返回包含相邻相同值的嵌套列表的列表。例如

的输入列表
[1,2,4,5,5,7,6,6,6] 

会返回

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

我该如何编程一个函数来做到这一点?

3 个答案:

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