字符串列表中频繁出现的Python列表

2024-06-10 01:50:47 发布

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

我正在编写一个python函数,它使用字符串列表并生成最频繁出现的项的列表。在

例如:

>>> trending(["banana", "trouble", "StarWars", "StarWars", "banana", "chicken", "BANANA"])
["banana", "StarWars"]

但是

^{pr2}$

到目前为止,我已经编写了一个函数,它只生成第一个频繁出现的单词,而不是一个频繁出现的单词列表。另外,我的列表包含了这一个频繁项的索引。在

def trending(slst):
    words = {}
    for word in slst:
        if word not in words:
            words[word] = 0
        words[word] += 1
    return words

如何修复此函数以生成最频繁出现的项的列表(而不是最频繁出现的第一项),以及如何删除索引?在


Tags: 函数字符串in列表单词wordbananawords
3条回答

使用^{}

In [1]: from collections import Counter

In [2]: l = ["banana", "trouble", "StarWars", "StarWars", "banana", "chicken", "BANANA"]

In [3]: Counter(l)
Out[3]: Counter({'StarWars': 2, 'banana': 2, 'BANANA': 1, 'trouble': 1, 'chicken': 1})

使用^{}可以得到n最常见的项目。在


更新

你的trending()函数基本上也是Counter的功能。在计算单词出现的次数后,可以使用max(words.values())获得最大出现次数。这可用于筛选单词列表:

^{pr2}$

以下解决方案仅使用列表。不使用dictionaryset或其他Python集合:

def trending(words):
    lcounts = [(words.count(word), word) for word in words]
    lcounts.sort(reverse=True)
    ltrending = []

    for count, word in lcounts:
        if count == lcounts[0][0]:
            if word not in ltrending:
                ltrending.append(word)
        else:
            break

    return ltrending


ltests = [
    ["banana", "trouble", "StarWars", "StarWars", "banana", "chicken", "BANANA"],
    ["banana", "trouble", "StarWars", "Starwars", "banana", "chicken"]]

for test in ltests:
    print trending(test)

输出如下:

^{pr2}$

不使用Counter,您可以使用dict创建自己的计数器并提取常用项:

def trending(slst):
    count = {}
    items = []

    for item in set(slst):
        count[item] = slst.count(item)

    for k, v in count.items():
        if v == max(count.values()):
            items.append(k)

    return items

相关问题 更多 >