用python统计list中每个元素的出现次数并按次数大小输出

本文介绍了如何使用Python字典`aa`统计列表`a`中元素出现次数,并对结果进行排序。首先通过遍历字典更新键值对,然后使用`sorted`函数根据值降序排列。最后,将键值对重新赋值给字典输出。

a=[1,'A',23,12,12,12,22,1,231,1,1,'A']
aa=dict()
for e in a:
    if e not in aa.keys():
        aa[e]=1
    else:
        aa[e]+=1


aa1=sorted(aa.items(),key=lambda item:item[1],reverse=True)
for e in aa1:
    aa[e[0]]=e[1]
print(aa)

 

 

### 统计n个数中每个数字出现的次数 统计n个数中每个数字出现的次数可以通过多种编程语言实现。以下是基于C、JavaPython的解决方案。 #### C语言实现 在C语言中,可以使用数组来存储输入的数字,通过循环统计每个数字的出现次数。以下是一个完整的代码示例: ```c #include <stdio.h> int main() { int x, count[10] = {0}; // 初始化计数器为0 while (scanf("%d", &x) != EOF && x != -1) { // 输入直到遇到-1 if (x >= 0 && x <= 9) { count[x]++; } } for (int i = 0; i < 10; i++) { // 输出结果 printf("%d 出现 %d 次\n", i, count[i]); } return 0; } ``` 上述代码通过一个`while`循环不断读取用户输入的数字,数组`count`记录每个数字出现的次数[^1]。 #### Java语言实现 在Java中,可以通过类似的方法实现。以下是一个示例代码: ```java import java.util.Scanner; public class ArrayCountTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个正整数:"); int num = sc.nextInt(); int[] arr1 = new int[10]; // 初始化计数数组 while (num > 0) { arr1[num % 10]++; // 记录当前数字出现的次数 num /= 10; } for (int i = 0; i < arr1.length; i++) { // 输出结果 if (arr1[i] > 0) { System.out.print(i + " 出现 " + arr1[i] + " 次\t"); } } System.out.println(); } } ``` 此代码片段展示了如何接收用户输入的正整数,逐位分离统计每个数字的出现次数[^2]。 #### Python语言实现 Python提供了简洁的方式来完成同样的任务。下面是一个Python版本的实现: ```python from collections import Counter def count_numbers(n, numbers): counter = Counter(numbers) result = [] for i in range(10): result.append((i, counter.get(i, 0))) return result # 示例输入 n = int(input("请输入数字个数 n: ")) numbers = list(map(int, input("请输入 n 个数字(以空格分隔): ").split())) # 调用函数打印结果 results = count_numbers(n, numbers) for number, count in results: print(f"{number} 出现 {count} 次") ``` 此代码利用了Python的`collections.Counter`类,能够快速统计列表中每个元素的出现次数[^3]。 ### 算法复杂度分析 - **时间复杂度**: 如果有n个数字需要处理,且每个数字最多包含m位,则总的时间复杂度为O(n * m),其中主要耗时在于遍历每个数字及其每一位。 - **空间复杂度**: 需要一个固定大小数组(长度为10)来存储计数结果,因此空间复杂度为O(1)[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值