列表理解以获得相同值的二维列表
List comprehension to get a 2D list of the same values
我有以下数字:
arr = [4, 5, 5, 5, 6, 6, 4, 1, 4, 4, 3, 6, 6, 3, 6, 1, 4, 5, 5, 5]
我想创建一个列表理解,它将匹配我在二维列表数组中的所有相同值,例如:
[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
我试过类似的方法:
listArr = sorted(arr)
不幸的是,我不知道如何将排序后的数字放入二维列表数组中。
您可以创建临时字典来对数字进行分组:
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)
打印:
[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
如果 s
是 list
个数字:
out = {}
for d in s:
out.setdefault(d, []).append(d)
out = sorted(out.values())
print(out)
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))]
其中分组键是排序数组中的值本身,组是连续值。 [*gr]
是一种从这些值中形成列表的方法,也可以在其中使用 list(gr)
。
获得
>>> out
[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
s = "4 5 5 5 6 6 4 1 4 4 3 6 6 3 6 1 4 5 5 5"
l = list(map(int, s.split()))
output = [[val] * l.count(val) for val in set(l)]
输出:
[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
排序后可以使用itertools.groupby
.
>>> L = [4, 5, 5, 5, 6, 6, 4, 1, 4, 4, 3, 6, 6, 3, 6, 1, 4, 5, 5, 5]
>>> from itertools import groupby
>>> [list(group) for _key, group in groupby(sorted(L))]
[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
但是,像 那样在之后排序可能更有效,因为这意味着更少的交换。
我有以下数字:
arr = [4, 5, 5, 5, 6, 6, 4, 1, 4, 4, 3, 6, 6, 3, 6, 1, 4, 5, 5, 5]
我想创建一个列表理解,它将匹配我在二维列表数组中的所有相同值,例如:
[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
我试过类似的方法:
listArr = sorted(arr)
不幸的是,我不知道如何将排序后的数字放入二维列表数组中。
您可以创建临时字典来对数字进行分组:
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)
打印:
[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
如果 s
是 list
个数字:
out = {}
for d in s:
out.setdefault(d, []).append(d)
out = sorted(out.values())
print(out)
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))]
其中分组键是排序数组中的值本身,组是连续值。 [*gr]
是一种从这些值中形成列表的方法,也可以在其中使用 list(gr)
。
获得
>>> out
[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
s = "4 5 5 5 6 6 4 1 4 4 3 6 6 3 6 1 4 5 5 5"
l = list(map(int, s.split()))
output = [[val] * l.count(val) for val in set(l)]
输出:
[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
排序后可以使用itertools.groupby
.
>>> L = [4, 5, 5, 5, 6, 6, 4, 1, 4, 4, 3, 6, 6, 3, 6, 1, 4, 5, 5, 5]
>>> from itertools import groupby
>>> [list(group) for _key, group in groupby(sorted(L))]
[[1, 1], [3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6]]
但是,像