对列表中具有相同值的子列表进行计数

2024-09-28 05:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

如何计算列表中具有相同值(顺序无关紧要)的子列表

我试过这个:

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},
)

Tags: infromimport列表forinput顺序value
2条回答

我觉得你很接近

Counter(str(set(e)) for e in Input)
返回

Counter({"{'heyhey123', 'Test123', 'another_unique_value'}": 3,
     "{'heyhey123'}": 1,
     "{'heyhey123', 'Test123'}": 1})

这和你要找的几乎一样我相信:)

你可以替换

Counter(str(e) for e in li)

Counter(tuple(sorted(e)) for e in li)

给出输出:

Counter({('Test123', 'another_unique_value', 'heyhey123'): 3,
         ('heyhey123',): 1,
         ('Test123', 'heyhey123'): 1})

另一种选择是使用set(e)忽略列表中元素的顺序,但这有忽略重复的缺点-['Test123', 'heyhey123', 'another_unique_value']将被视为与['Test123', 'heyhey123', 'another_unique_value', 'another_unique_value']相同-此外,当从不易损坏的set转换为包含在Counter中时,不能保证相同的顺序

相关问题 更多 >

    热门问题