Python 将匹配的列表项分组,直到更改,然后重复

Python 将匹配的列表项分组,直到更改,然后重复,python,python-3.x,list,Python,Python 3.x,List,我正在尝试将项目分组到列表中以显示它们。逻辑如下 我有一个列表:list=[1,1,2,3,4,4,5,5,6] 我想把它转换成:grouped_list=[[1,1]、[2]、[3]、[4,4]、[5,5]、[6] 我尝试了以下方法: for i in range(0, len(list)): if(list[i] == list[i+1]): temp_list.append(list[i]) else: grouped_list.append

我正在尝试将项目分组到列表中以显示它们。逻辑如下

我有一个列表:
list=[1,1,2,3,4,4,5,5,6]
我想把它转换成:
grouped_list=[[1,1]、[2]、[3]、[4,4]、[5,5]、[6]

我尝试了以下方法:

for i in range(0, len(list)):
    if(list[i] == list[i+1]):
        temp_list.append(list[i])
    else:
        grouped_list.append(temp_list)
        temp_list.clear()
        grouped_list.append([list[i]])
但是,这会导致错误的输出。

您可以使用以下方法:

从集合导入defaultdict
您的_列表=[1,1,2,3,4,4,5,5,6]
您的_dict=defaultdict(列表)
对于您的_列表中的i:
你的遗嘱[i].附加(i)
结果=排序(您的_dict.values())#如果顺序不重要,请跳过此行
打印(结果)
# [[1, 1], [2], [3], [4, 4], [5, 5], [6]]
您可以使用

从集合导入defaultdict
您的_列表=[1,1,2,3,4,4,5,5,6]
您的_dict=defaultdict(列表)
对于您的_列表中的i:
你的遗嘱[i].附加(i)
结果=排序(您的_dict.values())#如果顺序不重要,请跳过此行
打印(结果)
# [[1, 1], [2], [3], [4, 4], [5, 5], [6]]
您可以使用

你可以用


最严重的错误是使用了唯一的
临时列表
。每次将
temp_list
添加到
grouped_list
时,它都与您添加的列表相同。
clear
方法清空此唯一列表。相反,
temp\u list.clear()
您应该执行
temp\u list=[]
来创建一个新列表

您应该只迭代到
len()-1
,因为您可以访问
i+1

还有其他问题,但这两个是最重要的


另外,不要对变量名使用
list
,因为这会重新定义Python的标准项。您可以这样做,但这是一个坏主意。

最严重的错误是使用唯一的
临时列表。每次将
temp_list
添加到
grouped_list
时,它都与您添加的列表相同。
clear
方法清空此唯一列表。相反,
temp\u list.clear()
您应该执行
temp\u list=[]
来创建一个新列表

您应该只迭代到
len()-1
,因为您可以访问
i+1

还有其他问题,但这两个是最重要的

另外,不要对变量名使用
list
,因为这会重新定义Python的标准项。您可以这样做,但这是个坏主意。

没有依赖项:

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

c = list()
for n in set(l):
    c.append( [n]*l.count(n) )
结果:

[[1, 1], [2], [3], [4, 4], [5, 5], [6]]   
[[1, 1], [2], [3], [4, 4], [5, 5], [6]]
无依赖项:

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

c = list()
for n in set(l):
    c.append( [n]*l.count(n) )
结果:

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

不使用标准库的“特殊”功能的答案。(这是为了向@Adam展示。我认为@abc with
itertools.groupby()
的答案是更好的答案。)


不使用标准库的“特殊”功能的答案。(这是为了向@Adam展示。我认为@abc with
itertools.groupby()
的答案是更好的答案。)


对一些内置结构(重复、计数和设置)使用列表理解:

结果:

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

提示:避免使用“list”作为列表的名称,因为它是Python结构的保留字。这同样适用于“dict”和“set”。

使用一些内置结构的列表理解(重复、计数和set):

结果:

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

提示:避免使用“list”作为列表的名称,因为它是Python结构的保留字。这同样适用于“dict”和“set”。

您能举一个当前输出的例子吗?您的代码中有很多问题吗?你的上下文是什么?你能给出一个当前输出的例子吗?你的代码中有很多问题吗?你的背景是什么?算法的复杂性是可怕的。在列表上迭代并比较连续值确实更好。你能发布一个答案吗?完成。您的解决方案还有一个可能的问题。在类似于[1,1,2,1]的列表的一般上下文中,您的代码连接所有值1,而不是仅连接连续值。这取决于我们想要什么,这是一个问题。感谢您添加答案。这确实适用于
[1,1,2,1]
?算法的复杂性非常糟糕。在列表上迭代并比较连续值确实更好。你能发布一个答案吗?完成。您的解决方案还有一个可能的问题。在类似于[1,1,2,1]的列表的一般上下文中,您的代码连接所有值1,而不是仅连接连续值。这取决于我们想要什么,这是一个问题。感谢您添加答案。这确实适用于
[1,1,2,1]
?当然,使用库通常会更好。很高兴看到其他算法;我自己也提高了。当然,利用图书馆通常会更好。很高兴看到其他算法;我已经提高了自己的水平。