首页 > 解决方案 > Python:计算列表/数据框列表中列表/数据框的唯一实例

问题描述

我有一个 for 循环创建 - 比如说 - 1000 个列表。这些列表的生成是稍微随机的,所以生成的列表是有区别的,但是也会有一些重叠的。我想计算一个唯一列表出现的次数,即给定列表与另一个生成列表重叠的次数。

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

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

如果有帮助,这里是上下文:正如列表项可能表明的那样,我正在模拟足球世界杯小组赛阶段,每个模拟结果都会生成一个列表,其中包含每支球队在给定模拟中的表现。所以我想看看,例如 10000 次模拟,哪些结果最有可能考虑到它们在模拟中出现的次数。

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

再次,问题是:

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

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

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

您将如何计算前两个列表有两个实例,第三个列表有 1 个,依此类推。

标签: pythonpandasdataframe

解决方案


任何解决方案都将特定于您计算的对象类型。我处理您突出显示的特定示例,即字符串列表的列表。

您可以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})

推荐阅读