提高python对嵌套lis中id循环计数的效率

2024-06-10 11:08:53 发布

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

我正在尝试提高一个脚本的效率,该脚本使用一个表示数据表的嵌套列表和一列id(每个id可能有许多条目)。该脚本统计具有100个以上条目和200个以上条目的ID数。你知道吗

有没有一种方法可以让我不必每次都用列表来循环阅读?你知道吗

list_of_IDs = [row[4] for row in massive_nested_list] ### get list of ID numbers
list_of_IDs = set(list_of_IDs) ### remove duplicates
list_of_IDs = list(list_of_IDs)
counter200 = 0
counter100 = 0
for my_ID in list_of_IDs:
    temp = [row for row in massive_nested_list if row[4] == my_ID]
    if len(temp) > 200:
        counter200 += 1
    if len(temp) > 100:
        counter100 += 1

Tags: ofin脚本idids列表forif
2条回答

使用^{} instance来计算您的id。不需要先收集所有可能的ID。然后您可以从那里整理计数:

from collections import Counter

counts = Counter(row[4] for row in massive_nested_list)
counter100 = counter200 = 0
for id, count in counts.most_common():
    if count >= 200:
        counter200 += 1
    elif count >= 100:
        counter100 += 1
    else:
        break

给定N个嵌套列表中的K个惟一id,您的代码将使用O(KN)个循环来计算所有内容;最坏的情况(K==N)意味着您的解决方案需要二次时间(对于每增加一行,您需要多做N倍的工作)。上面的代码将no一个循环减少到N个项目上,然后将另一个循环减少到K个项目上,使其成为O(N)(线性)算法。你知道吗

最简单的方法是:

temp100 = [row for row in massive_nested_list if row[4] == my_ID and row >= 100 and row < 200]
temp200 = [row for row in massive_nested_list if row[4] == my_ID and row >= 200]

然后你可以去:

len(temp200)  

或者

counter200 = len(temp200)  

相关问题 更多 >