如何在Python列表中找到最常见的字符串?

时间:2019-08-30 20:14:55

标签: python

我正在处理古代DNA数据。我有一个具有给定坐标的n个不同碱基对的数组。

例如 ['A','A','C','C','G']

我需要在脚本中进行一些设置,从而确定最频繁的呼叫。如果有一个,应该使用那个。如果有两个(或三个)并列(例如,此处为A和C),则我需要它随机选择两者中的一个。

我一直在寻找解决方案,但找不到满意的解决方案。我看到的最常见的解决方案是Counter,但是Counter对我来说毫无用处,因为c.most_common(1)不能确定1和2是绑定的。

2 个答案:

答案 0 :(得分:1)

首先可以使用Counter函数从max返回的映射中获取最大计数,然后使用列表推导仅输出计数等于最大计数的键。由于Countermax和列表理解都花费线性时间,因此代码的总体时间复杂度可以保持在 O(n)

from collections import Counter
import random
lst = ['A','A','C','C','G']
counts = Counter(lst)
greatest = max(counts.values())
print(random.choice([item for item, count in counts.items() if count == greatest]))

这将输出AC

答案 1 :(得分:0)

类似的事情会起作用:

import random

string = ['A','A','C','C','G']

dct = {}

for x in set(string):
    dct[x] = string.count(x)

max_value = max(dct.values())

lst = []

for key, value in dct.items():
    if value == max_value:
        lst.append(key)

print(random.choice(lst))