【发布时间】:2021-05-03 18:35:42
【问题描述】:
如何计算列表中具有相同值(顺序无关紧要)的子列表?
我试过了:
from collections import Counter
Input = [
[
'Test123', 'heyhey123', 'another_unique_value',
],
[
'Test123', 'heyhey123', 'another_unique_value',
],
[
'heyhey123',
],
[
'Test123', 'heyhey123',
],
[
'another_unique_value', 'heyhey123', 'Test123'
]
]
Counter(str(e) for e in li)
Output:
Counter({
"['Test123', 'heyhey123', 'another_unique_value']": 2},
"['heyhey123']": 1},
"['Test123', 'heyhey123']": 1},
"['another_unique_value', 'heyhey123', 'Test123']": 1},
)
显然,它会根据列表中的值进行排序。如何计算顺序无关紧要的子列表?
我想要的输出是:
Counter({
"['Test123', 'heyhey123', 'another_unique_value']": 3},
"['heyhey123']": 1},
"['Test123', 'heyhey123']": 1},
)
【问题讨论】:
-
使用
set(e)而不是str(e) -
@Barmar 你必须使用
tuple(set(e))- 集合是不可散列的。 -
另外,如果值可以在一个子列表中出现两次,您可以使用
tuple(sorted(e))。 -
@CDJB 宾果游戏!。
tuple(set(e))可能不起作用,因为未定义集合元素的顺序。 -
@CDJB 成功了!