我正在处理古代DNA数据。我有一个具有给定坐标的n个不同碱基对的数组。
例如 ['A','A','C','C','G']
我需要在脚本中进行一些设置,从而确定最频繁的呼叫。如果有一个,应该使用那个。如果有两个(或三个)并列(例如,此处为A和C),则我需要它随机选择两者中的一个。
我一直在寻找解决方案,但找不到满意的解决方案。我看到的最常见的解决方案是Counter,但是Counter对我来说毫无用处,因为c.most_common(1)不能确定1和2是绑定的。
答案 0 :(得分:1)
首先可以使用Counter
函数从max
返回的映射中获取最大计数,然后使用列表推导仅输出计数等于最大计数的键。由于Counter
,max
和列表理解都花费线性时间,因此代码的总体时间复杂度可以保持在 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]))
这将输出A
或C
。
答案 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))