문제

안녕하세요 저는 프로그래밍을 처음 접했고 Python을 배우고 싶습니다. 목록에서 가장 중복되는 항목을 반환 해야하는 코드를 작업 중입니다. 1 이상이 있으면 모두 반환해야합니다. 전.

List = ['a','b','c','b','d','a'] #then it should return both a and b.
List = ['a','a','b','b','c','c','d'] #then it should return a b and c.
List = ['a','a','a','b','b','b','c','c','d','d','d'] #then it should return a b and d.

참고 : 목록에서 가장 일반적인 요소가 무엇인지 알지 못하므로 가장 일반적인 요소를 찾아야하며 둘 이상이 있으면 모두 반환해야합니다. 목록에 요소로 숫자 또는 기타 문자열이 있으면 코드도 작동해야합니다.

어떻게 진행 해야할지 모르겠습니다. 약간의 도움을 사용할 수 있습니다.

전체 프로그램은 다음과 같습니다.

from collections import Counter

def redundant(List):
    c = Counter(List)
    maximum = c.most_common()[0][1]
    return [k for k, v in c.items()if v == maximum]

def find_kmers(DNA_STRING, k):
    length = len(DNA_STRING)
    a = 0
    List_1 = []
    string_1 = ""
    while a <= length - k:
        string_1 = DNA_STRING[a:a+k]
        List_1.append(string_1)
        a = a + 1
    redundant(List_1)

이 프로그램은 DNA 줄과 KMER의 길이를 가져 와서 해당 DNA 줄에 존재하는 길이의 케머가 무엇인지 찾아야합니다.

샘플 입력 :

ACGTTGCATGTCGCATGATGCATGAGAGCT
4

샘플 출력 :

CATG GCAT  
도움이 되었습니까?

해결책

당신이 사용할 수있는 collections.Counter:

from collections import Counter
def solve(lis):
    c = Counter(lis)
    mx = c.most_common()[0][1]
    #or mx = max(c.values())
    return [k for k, v in c.items() if v == mx]

print (solve(['a','b','c','b','d','a']))
print (solve(['a','a','b','b','c','c','d']))
print (solve(['a','a','a','b','b','b','c','c','d','d','d'] ))

산출:

['a', 'b']
['a', 'c', 'b']
['a', 'b', 'd']

위의 코드의 약간 다른 버전 itertools.takewhile:

from collections import Counter
from itertools import takewhile
def solve(lis):
    c = Counter(lis)
    mx = max(c.values())
    return [k for k, v in takewhile(lambda x: x[1]==mx, c.most_common())]

다른 팁

inputData = [['a','b','c','b','d','a'], ['a','a','b','b','c','c','d'], ['a','a','a','b','b','b','c','c','d','d','d'] ]
from collections import Counter
for myList in inputData:
    temp, result = -1, []
    for char, count in Counter(myList).most_common():
        if temp == -1: temp = count
        if temp == count: result.append(char)
        else: break
    print result

산출

['a', 'b']
['a', 'c', 'b']
['a', 'b', 'd']
>>> def maxs(L):
...   counts = collections.Counter(L)
...   maxCount = max(counts.values())
...   return [k for k,v in counts.items() if v==maxCount]
... 
>>> maxs(L)
['a', 'b']
>>> L = ['a','a','b','b','c','c','d']
>>> maxs(L)
['a', 'b', 'c']
>>> L = ['a','a','a','b','b','b','c','c','d','d','d']
>>> maxs(L)
['d', 'a', 'b']

사용하지 않는 솔루션을 제공하기 위해 collections & 목록 이해력 사용.

given_list = ['a','b','c','b','d','a']
redundant = [(each, given_list.count(each)) for each in set(given_list) if given_list.count(each) > 1]
count_max = max(redundant, key=lambda x: x[1])[1]
final_list = [char for char, count in redundant if count == count_max]

추신 - 나는 나 자신이 사용하지 않았다 Counters 아직 :( 배울 시간!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top