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)
不幸的是我不知道如何将排序后的数字放入二维列表数组中。
您可以创建临时字典来对数字进行分组:
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)
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)
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |