Python统计列表中元素的个数

  1. 使用collections模块中的Counter类来实现

with open('yourfile.txt', 'r') as f:
from collections import Counter
for k, v in Counter(str(f.readlines()).split()).items(): print(k, v)

2. 一个更简单的方法

words = input().split()
print('\n'.join(word + ' ' + str(words.count(word)) for word in set(words)))

3. 手动遍历列表并更新字典 

# 假设这是你的列表
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']

# 创建一个空字典来存储结果
count_dict = {}

# 遍历列表中的每个元素
for item in my_list:
    if item in count_dict:
        # 如果元素已经在字典中,增加它的计数
        count_dict[item] += 1
    else:
        # 如果元素不在字典中,将其添加到字典并设置计数为1
        count_dict[item] = 1

# 打印结果
print(count_dict)
4. 使用defaultdict 
from collections import defaultdict

my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = defaultdict(int)  # int作为默认工厂函数,表示默认值为0

for item in my_list:
    count_dict[item] += 1

print(dict(count_dict))  # 将defaultdict转换为普通字典进行打印

5. 使用get方法 

my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = {}

for item in my_list:
    count_dict[item] = count_dict.get(item, 0) + 1

print(count_dict)

6. 使用groupby

from itertools import groupby

my_list = sorted(['apple', 'banana', 'apple', 'orange', 'banana', 'apple'])
count_dict = {k: sum(1 for _ in g) for k, g in groupby(my_list)}

print(count_dict)

7. 使用set和列表推导 

my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
unique_items = set(my_list)
count_dict = {item: my_list.count(item) for item in unique_items}

print(count_dict)

8.  使用循环和enumerate

my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = {}

for index, item in enumerate(my_list):
    if item in count_dict:
        count_dict[item] += [my_list[index]]
    else:
        count_dict[item] = [my_list[index]]

for k, v in count_dict.items():
    print(f"{k}: {len(v)}")  # 打印每个元素及其出现次数

9. 使用map函数 

my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = dict(map(lambda x: (x, my_list.count(x)), my_list))
print(count_dict)

10.  使用reduce函数

import numpy as np

my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
unique_items = np.unique(my_list)
counts = np.array([np.count_nonzero(my_list == item) for item in unique_items])
count_dict = dict(zip(unique_items, counts))
print(count_dict)

11.  使用itertools.tee

from itertools import tee

def count_items(it):
    seen = set()
    counts = {}
    for item in it:
        if item in seen:
            counts[item] += 1
        else:
            seen.add(item)
            counts[item] = 1
    return counts

my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = count_items(tee(my_list, 2)[0])  # 使用tee创建两个相同的迭代器
print(count_dict)

12. 使用collections.defaultdictmap结合 

from collections import defaultdict

my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = defaultdict(int)
count_dict = map(lambda x: (x, count_dict[x] + 1), my_list)
count_dict = dict(count_dict)
print(count_dict)

13.  使用operator.itemgetter

from operator import itemgetter

my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = {}
for item in my_list:
    key = itemgetter(0)(count_dict.get(item, [item, 0]))
    count_dict[item] = [key, count_dict.get(item, [item, 0])[1] + 1]
count_dict = {k: v[1] for k, v in count_dict.items()}
print(count_dict)

14. 使用多线程或多进程 

from concurrent.futures import ThreadPoolExecutor
from itertools import islice

my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
chunk_size = 1000  # 根据你的数据集大小和可用资源调整这个值

def count_chunk(chunk):
    return {item: my_list.count(item) for item in chunk}

chunks = [my_list[i:i + chunk_size] for i in range(0, len(my_list), chunk_size)]
with ThreadPoolExecutor() as executor:
    counts = executor.map(count_chunk, chunks)
    count_dict = {k: v for d in counts for k, v in d.items()}
print(count_dict)

15. Pandas 

import pandas as pd

df = pd.DataFrame(my_list, columns=['Fruit'])
count_dict = df['Fruit'].value_counts().to_dict()
print(count_dict)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值