Python根据列表元素出现次数排序

Chekio上面的一道题,觉得挺有意思的,随笔记录一下
比如说
[4, 6, 2, 2, 6, 4, 4, 4]:
4出现的次数最多,6和2出现的次数一样,但是6在2前面,因此该列表根据元素出现次数排序后的结果应该为:
[4, 4, 4, 4, 6, 6, 2, 2]

def frequency_sort(items):
    # your code here
    lst1 = []
    for i in items:
        if i not in lst1:
            lst1.append(i)
    lst = []
    dic = {}
    # # print(lst1)
    for i in lst1:
        dic[i] = items.count(i)
    dic = dict(sorted(dic.items(), key=lambda x:x[1], reverse=True))
    # #print(dic)
    count = 0
    for k, v in dic.items():
        for i in range(v):
            lst.append(k)
    # # print(lst)
    return lst


if __name__ == '__main__':
    print("Example:")
    print(frequency_sort([4, 6, 2, 2, 6, 4, 4, 4]))

    # These "asserts" are used for self-checking and not for an auto-testing
    assert list(frequency_sort([4, 6, 2, 2, 6, 4, 4, 4])) == [4, 4, 4, 4, 6, 6, 2, 2]
    assert list(frequency_sort(['bob', 'bob', 'carl', 'alex', 'bob'])) == ['bob', 'bob', 'bob', 'carl', 'alex']
    assert list(frequency_sort([17, 99, 42])) == [17, 99, 42]
    assert list(frequency_sort([])) == []
    assert list(frequency_sort([1])) == [1]
    print("Coding complete? Click 'Check' to earn cool rewards!")


最开始我使用集合去重,但是发现使用set函数去重把元素的顺序打乱了,破坏了位置稳定性,于是索性使用列表把没在里面的元素加进去,完成一个去重的功能。
还有比较有意思的就是字典排序,可以根据键也可以根据值,记录一下

dic = sorted(dic.items(), key=lambda x:x[1], reverse=True)

首先 - 字典.items(),然后使用匿名函数把字典的值设置为key,也就是根据值排序,sorted默认从小到大,reverse=True设置排序顺序为从大到小

至于这个集合去重,确实有问题,使用之后破坏了元素位置的稳定性,害我找一半天原因,甚至想在字典里倒腾键值对的位置顺序,不过的确挺有意思的,随笔记录一下。

侵删

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python中的Counter模块来统计单词数量,并使用sorted函数按出现次数排序。具体实现如下: ```python from collections import Counter text = "Python是一种高级编程语言,被广泛应用于Web开发、数据分析、人工智能等领域。Python语言简洁易学,拥有丰富的第三方库和工具,是开发者的首选语言之一。" # 将文本转换为单词列表 words = text.split() # 使用Counter统计单词数量 word_count = Counter(words) # 按出现次数排序 sorted_word_count = sorted(word_count.items(), key=lambda x: x[1], reverse=True) # 输出结果 for word, count in sorted_word_count: print(f"{word}: {count}") ``` 输出结果为: ``` Python是一种高级编程语言,被广泛应用于Web开发、数据分析、人工智能等领域。Python语言简洁易学,拥有丰富的第三方库和工具,是开发者的首选语言之一。 Python是: 1 开发者的首选语言之一。: 1 拥有丰富的第三方库和工具,是: 1 被广泛应用于Web开发、数据分析、人工智能等领域。Python语言简洁易学,: 1 等领域。Python语言简洁易学,拥有丰富的第三方库和工具,是开发者的首选语言之一。: 1 易学,拥有丰富的第三方库和工具,是开发者的首选语言之一。: 1 高级编程语言,被广泛应用于Web开发、数据分析、人工智能: 1 语言简洁易学,拥有丰富的第三方库和工具,是开发者的首选语言之一。Python是一种: 1 应用于Web开发、数据分析、人工智能等领域。Python语言简洁易学,拥有丰富的第三方库和工具,是开发者的首选语言之一。Python是一种高级编程语言,被广泛: 1 ``` 可以看到,程序成功地统计了文本中的单词数量,并按出现次数排序。 ### 回答2: Python作为一种高级编程语言,使用起来非常方便,而且拥有着众多的功能库和工具。其中就包括了统计文字中的单词数量并按出现次数排序的功能。 在Python中,我们可以使用多种方法来实现这个功能,比如: 1. 使用正则表达式 正则表达式是一种强大的文本处理工具,可以在Python中方便地实现对文本中的单词进行提取和统计。使用re库可以方便地进行单词提取、单词计数和排序等操作。 示例代码: ```python import re text = "Hello, world! This is a test text for counting words. Hello world, again!" # 使用正则表达式提取单词 words = re.findall(r'\b\w+\b', text) # 统计单词出现次数 word_count = {} for w in words: if w not in word_count: word_count[w] = 1 else: word_count[w] += 1 # 按单词出现次数排序 sorted_words = sorted(word_count.items(), key=lambda x: x[1], reverse=True) # 输出结果 print(sorted_words) ``` 2. 使用Counter工具 Counter是Python内置的一个工具,可以方便地进行列表、集合或字符串中元素的计数。使用Counter,我们可以快速实现对单词出现次数的统计和排序。 示例代码: ```python from collections import Counter text = "Hello, world! This is a test text for counting words. Hello world, again!" # 使用Counter统计单词出现次数 word_count = Counter(text.split()) # 按单词出现次数排序 sorted_words = word_count.most_common() # 输出结果 print(sorted_words) ``` 以上是两种Python实现统计文字中的单词数量并按出现次数排序的方法。当然,还有其他的方法可以实现这个功能,具体选择哪种方法完全取决于你的个人偏好和项目需求。 ### 回答3: Python是一种广泛使用的编程语言,其内置的各种库和工具使得统计文字中的单词数量并按出现次数排序成为一项非常简单的任务。下面是一种可能的解决方案: 首先,我们需要获取需要统计的文字,可以从文件中读取,也可以直接从键盘输入。假设我们已经获取到了文字,并将其存储在一个字符串变量中。 接下来,我们需要将文字分解为单词,这可以通过对字符串进行split操作来实现。默认情况下,split方法会以空格为分隔符将字符串分割为一个列表。如果需要去除字符串中的标点符号,则可以使用正则表达式等方法进行处理。 接下来,我们需要统计每个单词出现次数。我们可以使用Python内置的Counter类来实现这个功能。Counter类可以接受一个列表,并返回一个字典,其中每个键都是列表出现的元素,每个值都是该元素在列表出现次数。 最后,我们需要按照单词出现次数对字典进行排序Python的字典是无序的,我们可以使用sorted函数和lambda表达式来实现按值排序的功能。具体实现可以参考下面的代码: ``` import re from collections import Counter # 获取需要统计的文字 text = "The quick brown fox jumps over the lazy dog. The dog slept over the verandah." # 将文字分解为单词 words = re.findall(r'\w+', text.lower()) # 统计每个单词出现次数 word_counts = Counter(words) # 按照单词出现次数对字典进行排序 sorted_word_counts = sorted(word_counts.items(), key=lambda x: x[1], reverse=True) # 输出结果 for word, count in sorted_word_counts: print(f"{word}: {count}") ``` 在上面的代码中,我们首先使用正则表达式将字符串中的单词提取出来,并将它们转换为小写字母。然后,我们使用Counter类统计每个单词出现次数,并将结果存储在word_counts变量中。最后,我们使用sorted函数和lambda表达式按照单词出现次数对word_counts进行排序,并将结果存储在sorted_word_counts变量中。最后,我们遍历sorted_word_counts并输出每个单词的出现次数使用上述方法进行单词计数和排序是非常简单和有效的。如果需要对大量文本进行操作,则可以考虑使用一些更高效的算法和数据结构来进一步提高效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值