列表理解以获得相同值的二维列表

JAd*_*del 2 python list-comprehension list

我有以下数字:

arr = [4, 5, 5, 5, 6, 6, 4, 1, 4, 4, 3, 6, 6, 3, 6, 1, 4, 5, 5, 5]
Run Code Online (Sandbox Code Playgroud)

我想创建一个列表理解,它将与二维列表数组中的所有相同值相匹配,例如:

[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西:

listArr = sorted(arr)
Run Code Online (Sandbox Code Playgroud)

不幸的是我不知道如何将排序后的数字放入二维列表数组中。

And*_*ely 6

您可以创建临时字典来对数字进行分组:

s = "4 5 5 5 6 6 4 1 4 4 3 6 6 3 6 1 4 5 5 5"

out = {}
for d in s.split():
    out.setdefault(d, []).append(int(d))

out = sorted(out.values())
print(out)
Run Code Online (Sandbox Code Playgroud)

印刷:

[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
Run Code Online (Sandbox Code Playgroud)

如果s是一个list数字:

out = {}
for d in s:
    out.setdefault(d, []).append(d)

out = sorted(out.values())
print(out)
Run Code Online (Sandbox Code Playgroud)


Mus*_*dın 6

itertools.groupby

from itertools import groupby

arr = [4, 5, 5, 5, 6, 6, 4, 1, 4, 4, 3, 6, 6, 3, 6, 1, 4, 5, 5, 5]

out = [[*gr] for _, gr in groupby(sorted(arr))]
Run Code Online (Sandbox Code Playgroud)

其中分组键是排序数组中的值本身,组是连续的值。[*gr]是一种从这些值中形成列表的方法,也可以list(gr)在那里使用。

要得到

>>> out

[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
Run Code Online (Sandbox Code Playgroud)