python怎么找到列表/字符串中出现次数最多的元素(自用)

找简单方法直接看文末

首先,我们需要明确我们的编程目标:编写一个Python程序,该程序接收一个列表作为输入,并返回列表中出现次数最多的元素。如果有多个元素出现次数相同并且是最多的,那么程序应返回其中的一个。

这个问题可以通过使用Python的内置数据类型和函数来解决。具体来说,我们可以使用字典(dict)来存储每个元素及其出现的次数,然后使用max函数来找出出现次数最多的元素。

以下是一个实现这个功能的Python函数:

def most_common_element(lst):  
    # 创建一个空字典来存储元素及其出现的次数  
    element_count = {}  
    # 遍历列表中的每个元素  
    for element in lst:  
        # 如果元素已经在字典中,增加其计数  
        if element in element_count:  
            element_count[element] += 1  
        # 否则,将元素添加到字典中,并设置计数为1  
        else:  
            element_count[element] = 1  
    # 找出出现次数最多的元素和次数 ,max可以添加key值作为索引依据,一般为方法/函数
    most_common = max(element_count, key=element_count.get)  
'''
most_common = max(element_count, key=element_count.values)则不行,
因为dict.values()返回的是一个视图对象(可迭代)而不是某个具体的值,
但是可以most_common = max(element_count.values()),通过
找字典的值集合的最大值来实现
'''
    # 返回出现次数最多的元素  
    return most_common
# 稍微优化一下遍历统计时的代码:
def most_common_element(lst):  
    # 创建一个空字典来存储元素及其出现的次数  
    element_count = {}  
    # 遍历列表中的每个元素  
    for element in lst:  
        # 等价于上面代码的判断过程
        element_count[element]=element_count.get(element,0)+1   
    # 找出出现次数最多的元素和次数,这里就直接遍历element_count.values()就行了
    most_common = max(element_count.values())  
    # 返回出现次数最多的元素  
    return most_common

这个函数首先创建一个空字典来存储元素及其出现的次数。然后,它遍历列表中的每个元素。对于每个元素,如果它已经在字典中,函数就会增加它的计数;否则,函数会将它添加到字典中,并设置计数为1。最后,函数使用max函数和字典的get方法来找出出现次数最多的元素,并返回它。

注意:这个函数只返回出现次数最多的一个元素。如果有多个元素出现次数相同并且是最多的,那么这个函数将返回其中第一个遇到的元素。如果你想要获取所有出现次数最多的元素,你需要稍微修改这个函数,使其返回一个列表,包含所有出现次数最多的元素。

在上面的基础上该怎么进行修改使得找到所有次数最多的元素呢?

要修改函数以返回所有出现次数最多的元素,你需要首先找到最大出现次数,然后遍历字典来收集所有出现次数等于这个最大值的元素。以下是修改后的函数:

 
def most_common_elements(lst):  
    # 创建一个空字典来存储元素及其出现的次数  
    element_count = {}  
    # 遍历列表中的每个元素  
    for element in lst:  
        # 如果元素已经在字典中,增加其计数  
        if element in element_count:  
            element_count[element] += 1  
        # 否则,将元素添加到字典中,并设置计数为1  
        else:  
            element_count[element] = 1  
      
    # 找出出现次数的最大值  
    max_count = max(element_count.values())  
      
    # 收集所有出现次数等于最大值的元素  
    most_common = [element for element, count in element_count.items() if count == max_count]  
 # most_common=[element for element in element_count if element_count.get(element)==max_count]
      
    # 返回出现次数最多的元素列表  
    return most_common  
  
# 示例使用  
elements = [1, 2, 3, 3, 4, 4, 4, 5]  
print(most_common_elements(elements))  # 输出: [4]  
  
# 如果有多个元素出现次数相同且最多,则输出所有这些元素  
elements = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]  
print(most_common_elements(elements))  # 输出: [4]  
  
# 注意:在上面的示例中,由于4是出现次数最多的唯一元素,所以输出列表中只有4。  
# 但是如果输入列表像这样:[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5],  
# 那么输出将会是[4, 5],因为4和5都出现了最多次(4次)。

请注意,我在示例中使用了一个名为most_common_elements(复数形式)的函数名,以表明这个函数返回的是一个元素列表,而不是单个元素。同时,我也修正了示例列表和注释,以确保它们正确地反映了函数的行为。然而,在示例中给出的输出实际上是不正确的,因为根据列表的内容,应该有多个元素出现在输出中。正确的输出应该如下所示:

elements = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]  
print(most_common_elements(elements))  # 正确的输出应该是: [4]  
  
elements = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5]  
print(most_common_elements(elements))  # 正确的输出应该是: [4, 5]

在上面的第二个示例中,4和5都出现了4次,这是列表中出现次数最多的,因此它们都应该包含在输出列表中。

做这道题的时候遇到的问题:

  洛谷P2911 [USACO08OCT] Bovine Bones G  python解法

# [USACO08OCT] Bovine Bones G

## 题面翻译

贝茜喜欢玩棋盘游戏和角色扮演游戏,所以她说服了约翰开车带她去小商店.在那里她买了三个骰子。这三个不同的骰子的面数分别为 $s_1,s_2,s_3$。

对于一个有 $S$ 个面的骰子每个面上的数字是 $1,2,3,\ldots,S$。每个面(上的数字)出现的概率均等。贝茜希望找出在所有“三个面上的数字的和”中,哪个和的值出现的概率最大。

现在给出每个骰子的面数,需要求出哪个所有“三个面上的数字的和”出现得最频繁。如果有很多个和出现的概率相同,那么只需要输出最小的那个。

数据范围: $2\le s_1\leq 20$,$2 \leq s_2\leq 20$,$2 \leq s_3\leq 40$。

## 题目描述

Bessie loves board games and role-playing games so she persuaded Farmer John to drive her to the hobby shop where she purchased three dice for rolling. These fair dice have S1, S2, and S3 sides

respectively (2 <= S1 <= 20; 2 <= S2 <= 20; 2 <= S3 <= 40). 

Bessie rolls and rolls and rolls trying to figure out which three-dice sum appears most often.

Given the number of sides on each of the three dice, determine which three-dice sum appears most frequently. If more than one sum can appear most frequently, report the smallest such sum.

POINTS: 70

## 输入格式

\* Line 1: Three space-separated integers: S1, S2, and S3

## 输出格式

\* Line 1: The smallest integer sum that appears most frequently when the dice are rolled in every possible combination.

## 样例 #1

### 样例输入 #1

```
3 2 3
```

### 样例输出 #1

```
5
```

## 提示

Here are all the possible outcomes.

```
1 1 1 -> 3  
1 2 1 -> 4  
2 1 1 -> 4  
2 2 1 -> 5  
3 1 1 -> 5  
3 2 1 -> 6 
1 1 2 -> 4  
1 2 2 -> 5  
2 1 2 -> 5  
2 2 2 -> 6  
3 1 2 -> 6  
3 2 2 -> 7 
1 1 3 -> 5  
1 2 3 -> 6  
2 1 3 -> 6  
2 2 3 -> 7  
3 1 3 -> 7  
3 2 3 -> 8
```
Both 5 and 6 appear most frequently (five times each), so 5 is the answer.

顺带代码:

arr=[]
tk=dict() # 创建一个空字典来存储元素及其出现的次数
sum=0
s1,s2,s3=map(int,input().split())
for i in range(1,s1+1):
    for j in range(1,s2+1):
        for k in range(1,s3+1):
            sum=i+j+k
            arr.append(sum)
## 遍历列表中的每个元素
for i in arr:
    if i in tk:
        tk[i]+=1 # 如果元素已经在字典中,增加其计数 
    else:
        tk[i]=1 # 否则,将元素添加到字典中,并设置计数为1

 # 找出出现次数的最大值 
max_count=max(tk.values())
# 收集所有出现次数等于最大值的元素 
max_common=[el for el in tk if tk.get(el)==max_count]
# 从次数最多的元素列表找出最小值 
print(min(max_common))

---------------------------------------------------------------------------------------------------------------------------------

前面是网上找到的说法,太复杂了,最近看到简单的方法,不用开什么字典,太啰嗦

arr=[1,2,2,3,3,3,4,4,4,4,5,5,5,5]
print(max(arr,key=arr.count))

但是在这个和第一种方法一样,在列表中存在多个出现次数最多的元素时,只会返回统计到的第一个出现次数最多的元素。

  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值