-3

こんにちは、私はプログラミングが初めてで、Python を学びたいと思っています。リストで最も冗長なアイテムを返すコードに取り組んでいます。複数ある場合は、すべてを返す必要があります。元。

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 ストリングに存在するその長さの kemer を見つける必要があります。

サンプル入力:

ACGTTGCATGTCGCATGATGCATGAGAGCT
4

サンプル出力:

CATG GCAT  
4

4 に答える 4

2

使用できます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())]
于 2013-11-08T07:00:53.400 に答える
1
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']
于 2013-11-08T07:01:22.493 に答える
0

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]

PS - 私自身はまだ使用Countersしていません :( 学ぶ時間です!

于 2013-11-08T06:58:50.433 に答える