Python:统计列表/数据帧列表中列表/数据帧的唯一实例

2024-10-02 16:32:32 发布

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

我有一个for循环,可以创建1000个列表。这些列表的生成是稍微随机化的,因此生成的列表之间存在差异,但也会有一些重叠。我想计算一个唯一列表出现的次数,也就是说,一个给定的列表与另一个生成的列表重叠的次数

列表中的每个项目的格式如下:

TeamRecord(name='GER', group='F', p=9, gs=6, ga=2, defeated=['SWE', 'MEX', 'KOR']),

如果有帮助的话,下面是上下文:正如列表项可能指出的那样,我正在模拟足球世界杯小组赛,每个模拟结果都在一个列表中,其中包含每个球队在给定模拟中的表现。所以我想看看,举个例子,10000个模拟,哪种结果最有可能在模拟中出现多少次

我认为这更像是一个抽象的问题,我没有任何代码可以提供有用的。我确实尝试过将列表转换为数据帧,并考虑过使用.equals方法,但我不确定如何才能有效地完成

同样,问题是:

如何计算for循环生成的列表的每个唯一实例的出现次数?也就是说,列表中的所有项都应该与另一个生成的列表相同。这是可能的,还是仅仅是一种愚蠢的看待它的方式

编辑 说明目的的简单示例:

list_of_lists = [['Test1', 'Test2', 'Test3'],
                ['Test1', 'Test2', 'Test3'],
                ['Test4', 'Test5', 'Test6']]

你如何计算前两个列表有两个实例,第三个列表有一个,依此类推


Tags: 项目实例namegs列表for格式group
2条回答

任何解决方案都将特定于您正在计数的对象的类型。我只处理您强调的具体示例,即字符串列表

您可以对子列表的元组版本使用collections.Counter。这是因为元组是可散列的,而列表不是

from collections import Counter

L = [['Test1', 'Test2', 'Test3'],
     ['Test1', 'Test2', 'Test3'],
     ['Test4', 'Test5', 'Test6']]

res = Counter(map(tuple, L))

print(res)

Counter({('Test1', 'Test2', 'Test3'): 2,
         ('Test4', 'Test5', 'Test6'): 1})

对于多个条目的简单诊断:

from collections import Counter

lists = [['Test1', 'Test2', 'Test3'],
         ['Test1', 'Test2', 'Test3'],
         ['Test4', 'Test5', 'Test6']]

def hasher(x):
    return ''.join(x)

hashed = [hasher(x) for x in lists]
cnt = Counter(hashed)
print(cnt)

# you can reverse to to original list 
# if you world to combine it with the count, in some fashion
lists2 = [(cnt[hasher(x)], x) for x in lists] 

相关问题 更多 >