将特征频率附加到现有lis

2024-06-07 15:19:48 发布

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

我正在寻找一个相当有效的方法来附加一个列表中的每一项功能的频率。你知道吗

例如,给定以下列表:

[['syme', 4, 2], ['said', 4, 2], ['the', 3, 5]]

我想在它后面加上列表中后两项出现的频率。在上面的列表中,这看起来像这样:

[['syme', 4, 2, 2], ['said', 4, 2, 2], ['the', 3, 5, 1]]

其中第三个数字表示后两个数字作为列表中的后两项出现的频率。(例如,[4,2]是后两个数字的两倍,[3,5]出现一次,因此前两个列表将在末尾附加一个2,第三个列表将附加一个1。)

实际的列表可能有几十万个条目,因此效率和可读代码都在这里得到重视,我希望保持列表的当前顺序。你知道吗

提前谢谢!你知道吗


Tags: the方法代码功能列表顺序条目数字
3条回答

您可以使用collections.Counter类:

from collections import Counter

my_list = [['syme', 4, 2], ['said', 4, 2], ['the', 3, 5]]
counts = Counter([(x[1],x[2],) for x in my_list])

for sub_list in my_list:
    sub_list.append(counts[(sub_list[1], sub_list[2])])

如果顺序无关紧要:

import collections
collections.Counter(frozenset((i[1], i[2]))


a_list = [['syme', 4, 2], ['said', 4, 2], ['the', 3, 5]]

counts = Counter(frozenset(l[1], l[2]) for x in a_list)

for l in a_list:
    l.append(counts[frozenset(l[1], l[2])])

可能最有效的方法是使用^{}来获得基于对的计数

counts = Counter(tuple(item[1:]) for item in lst)

然后相应地更新列表:

for item in lst:
    item.append(counts[tuple(item[1:])])

如果两个项目的顺序无关紧要,那么在创建counts和更新lst时,用sorted(...)包装item[1:]。你知道吗

相关问题 更多 >

    热门问题