如何找到列表中重复次数最多的元素?
How to find most repeat elements in lists?
def print_most_numbers_occurrences(numbers_str):
number_list = numbers_str.split()
for i in number_list:
i=max(number_list,key=number_list.count)
print(i)
def test_print_most_numbers_occurrences():
print_most_numbers_occurrences('2 3 40 1 5 4 3 3 9 9')
print_most_numbers_occurrences('9 30 3 9 3 1 4')
print_most_numbers_occurrences('19 30 13 4 9 3 1 4')
def main():
test_print_most_numbers_occurrences()
main()
输出:
3
9
4
我想得到 所有 个重复次数最多的 '9 30 3 9 3 1 4'
:9 和 3 出现了两次,因此不仅要报告这两次出现 9
输出如下所示:
3
9
3
4
首先:使用 max
时不需要 for
循环。它已经为您做到了。
其次:如果您想拥有多个值,那么 max
并不是一个好的选择。对于这些计数操作,您应该使用 collections.Counter
(它也避免多次计算出现的次数)。
from collections import Counter
def print_most_numbers_occurrences(numbers_str):
number_list = numbers_str.split()
# count the occurrences
cnts = Counter(number_list)
# Get the maximum count
maximum_cnt = max(cnts.values())
# print all values that have the "maximum" count
print(*[val for val, cnt in cnts.items() if cnt == maximum_cnt])
并且使用您的输入进行的测试打印:
3
9 3
4
如果你更喜欢简单的循环而不是理解(或者你使用 python-2.x 而没有 print
函数)你也可以使用:
def print_most_numbers_occurrences(numbers_str):
number_list = numbers_str.split()
cnts = Counter(number_list)
maximum_cnt = max(cnts.values())
for value, cnt in cnts.items():
if cnt == maximum_cnt:
print(value)
给出:
3
9
3
4
from collections import Counter
a = ('2 3 40 1 5 4 3 3 9 9','9 30 3 9 3 1 4','19 30 13 4 9 3 1 4')
for x in a:
x = x.split()
b = Counter(x)
z = max(b.values())
for k in b.keys():
if b[k] == z:
print(k)
输出:
3
9
3
4
如果你想要另一个输出
from collections import Counter
a = ('2 3 40 1 5 4 3 3 9 9','9 30 3 9 3 1 4','19 30 13 4 9 3 1 4')
k = []
for x in a:
x = x.split()
b = Counter(x)
z = max(b.values())
k.append([f for f in b.keys() if b[f] == z])
print(k)
输出
[['3'], ['9', '3'], ['4']]
使用函数
from collections import Counter
def maxmy(sequences):
k = []
for x in sequences:
x = x.split()
b = Counter(x)
z = max(b.values())
k.append([f for f in b.keys() if b[f] == z])
return k
maxmy(('2 3 40 1 5 4 3 3 9 9','9 30 3 9 3 1 4','19 30 13 4 9 3 1 4'))
输出
[['3'], ['9', '3'], ['4']]
def print_most_numbers_occurrences(numbers_str):
number_list = numbers_str.split()
for i in number_list:
i=max(number_list,key=number_list.count)
print(i)
def test_print_most_numbers_occurrences():
print_most_numbers_occurrences('2 3 40 1 5 4 3 3 9 9')
print_most_numbers_occurrences('9 30 3 9 3 1 4')
print_most_numbers_occurrences('19 30 13 4 9 3 1 4')
def main():
test_print_most_numbers_occurrences()
main()
输出:
3
9
4
我想得到 所有 个重复次数最多的 '9 30 3 9 3 1 4'
:9 和 3 出现了两次,因此不仅要报告这两次出现 9
输出如下所示:
3
9
3
4
首先:使用 max
时不需要 for
循环。它已经为您做到了。
其次:如果您想拥有多个值,那么 max
并不是一个好的选择。对于这些计数操作,您应该使用 collections.Counter
(它也避免多次计算出现的次数)。
from collections import Counter
def print_most_numbers_occurrences(numbers_str):
number_list = numbers_str.split()
# count the occurrences
cnts = Counter(number_list)
# Get the maximum count
maximum_cnt = max(cnts.values())
# print all values that have the "maximum" count
print(*[val for val, cnt in cnts.items() if cnt == maximum_cnt])
并且使用您的输入进行的测试打印:
3
9 3
4
如果你更喜欢简单的循环而不是理解(或者你使用 python-2.x 而没有 print
函数)你也可以使用:
def print_most_numbers_occurrences(numbers_str):
number_list = numbers_str.split()
cnts = Counter(number_list)
maximum_cnt = max(cnts.values())
for value, cnt in cnts.items():
if cnt == maximum_cnt:
print(value)
给出:
3
9
3
4
from collections import Counter
a = ('2 3 40 1 5 4 3 3 9 9','9 30 3 9 3 1 4','19 30 13 4 9 3 1 4')
for x in a:
x = x.split()
b = Counter(x)
z = max(b.values())
for k in b.keys():
if b[k] == z:
print(k)
输出:
3
9
3
4
如果你想要另一个输出
from collections import Counter
a = ('2 3 40 1 5 4 3 3 9 9','9 30 3 9 3 1 4','19 30 13 4 9 3 1 4')
k = []
for x in a:
x = x.split()
b = Counter(x)
z = max(b.values())
k.append([f for f in b.keys() if b[f] == z])
print(k)
输出
[['3'], ['9', '3'], ['4']]
使用函数
from collections import Counter
def maxmy(sequences):
k = []
for x in sequences:
x = x.split()
b = Counter(x)
z = max(b.values())
k.append([f for f in b.keys() if b[f] == z])
return k
maxmy(('2 3 40 1 5 4 3 3 9 9','9 30 3 9 3 1 4','19 30 13 4 9 3 1 4'))
输出
[['3'], ['9', '3'], ['4']]