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设置排序顺序为从大到小

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

侵删

要统计Python列表元素出现的次数,可以使用字典来实现。可以遍历列表中的每个元素,将元素作为字典的键,出现的次数作为值,然后进行统计。以下是一个示例代码: ```python lis = [12, 34, 456, 12, 34, 66, 223, 12, 5, 66, 12, 23, 66, 12, 66, 5, 456, 12, 66, 34, 5, 34] def count_occurrences(lst): counts = {} # 创建一个空字典,用于统计元素出现次数 for item in lst: if item in counts: counts[item] += 1 # 如果元素已存在字典中,次数加1 else: counts[item] = 1 # 如果元素不存在字典中,说明第一次出现,次数初始化为1 return counts occurrences = count_occurrences(lis) print(occurrences) ``` 以上代码中,首先创建了一个空字典counts,用于统计元素出现的次数。然后,遍历列表中的每个元素,如果元素已存在字典中,则将其对应的计数加1;如果元素不存在字典中,则将其添加到字典中,并将计数初始化为1。最后,将统计结果打印出来。 运行以上代码,输出结果为:{12: 5, 34: 4, 456: 2, 66: 5, 223: 1, 5: 2, 23: 1}。这表示在给定的列表中,元素12出现了5次,元素34出现了4次,元素456出现了2次,元素66出现了5次,元素223出现了1次,元素5出现了2次,元素23出现了1次。 通过以上方法,你可以统计Python列表元素的出现次数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python 统计数组中元素出现次数并进行排序的实例](https://download.youkuaiyun.com/download/weixin_38667835/13988940)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [xml文件批量处理python脚本](https://download.youkuaiyun.com/download/caoxinri123/88239057)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Python根据列表元素出现次数排序](https://blog.youkuaiyun.com/qq_44197482/article/details/117478952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值