2016-11-12 9 views
0

実際には文字列ですが、回答がリストとして返されるため、リストに変換しました。私は今この問題を何時間も見てきており、それを得ることはできません。私は、例えば "Maryが少しの子羊を持っていた"のような文字列を、 "ab"のような別の文字列を取ってstring2からの文字があるかどうかを調べることになっています。リストを検索する最も簡単な方法は何ですか?

[A = 5] Iを返し
def problem3(myString, charString): 
    myList = list(myString) 
    charList = list(charString) 
    count = 0 
    newList = [] 
    newString = "" 
    for i in range(0,len(myList)): 
     for j in range(0,len(charList)): 
      if charList[j] == myList[i]: 
       count = count + 1 
       newString = charList[j] + "=" + str(count) 
    newList.append(newString) 
    return newList 

:だから私は今のところこれを持って、それは[ "A = 4"、 "B = 1"]

を を返す2例で正しく行われていればそれはnewList.append(文字列)で何かを知っています。どこに配置する必要がありますか?

+0

もう1つの内側ループが必要です – antlersoft

+0

辞書を使用して各文字のカウントを追跡します。 –

+0

内側のループはどこに行きますか? –

答えて

1

あなたはリスト内包と文字列count機能を非常に簡単にこれを行うことができます持っている(とリスト!):

  1. は、文字のリストに検索文字列を分割します。
  2. 検索文字列の各文字について、入力文字列をループして、どれくらい発生するかを決定します(count経由)。

例:

string = 'Mary had a little lamb' 
search_string = 'ab' 
search_string_chars = [char for char in search_string] 
result = [] 
for char in search_string_chars: 
    result.append('%s=%d' % (char, string.count(char))) 

結果:文字列がすでにあるとして、あなたは、文字のリストにsearch_string( 'AB')を分割する必要はありません

['a=4', 'b=1'] 

注意文字のリスト - 上記はその概念を説明するために行われました。したがって、上記の縮小バージョンでは(また、同じ結果が得られるもの)とすることができる:ここ

string = 'Mary had a little lamb' 
search_string = 'ab' 
result = [] 
for char in search_string: 
    result.append('%s=%d' % (char, string.count(char))) 
+0

良い方法のように見えますが、私はループの繰り返しを使用し、カウント/検索を行わないと仮定しています –

+0

@jaymoney:そうです。実際には、 'count'関数は、対応する文字を見つけるために文字列をループする場所のコードをカプセル化し、必要に応じてプレーンなPythonで再構築/実装することができます。あなたの現在の反復がこの懸念に対処していないので、私はそのように実装しました。 – jrd1

0

コーダによって述べたようにカウンターを用いて可能な解決策だ、

from collections import Counter 
s = "Mary had a little lambzzz" 

cntr = Counter(s) 
test_str = "abxyzzz" 

results = [] 
for letter in test_str: 
    if letter in s: 
     occurrances = letter + "=" + str(cntr.get(letter)) 
    else: 
     occurrances = letter + "=" + "0" 

    if occurrances not in results: 
     results.append(occurrances) 


print(results) 

出力を

['a=4', 'b=1', 'x=0', 'y=1', 'z=3'] 
+2

なぜ 'sの文字:'? 'z = 0'を返すことは適切な応答です。また、 'cntr [letter]'で十分です(すでに 'str'です)。 – AChampion

+0

あなたは正しいです、私は答えを更新しました!それを見つけていただきありがとうございます。 – chatton

+0

あなたはそれを必要以上に複雑にしました 'cntr [letter]'は存在しないキーに '0'を返していますので、' if'条件を完全に取り除くことができます。 – AChampion

0
import collections 

def count_chars(s, chars): 
    counter = collections.Counter(s) 
    return ['{}={}'.format(char, counter[char]) for char in set(chars)] 

これだけです。 Counterは実際に文字列の文字を数える作業を行います。次に、charsの文字を使用して書式文字列のリストの理解を作成します。 (charsはセットでなければなりません。charsに重複する文字がある場合、出力には1つしか表示されません)

+0

[この回答](http://stackoverflow.com/a/27251855/5211833)で提案された編集を参考にしてください。新しいメソッドから既存の回答へのコードの追加を控える。あなた自身の答えを投稿するか、提案された新しい解決策で回答者にpingを実行してください。特にコードを編集するときに行うべきややっていないことに関するメタに関する完全な言及については、関連するメタページを参照してください(http://meta.stackoverflow.com/questions/260245/when-should-i-make-edits-to-コード)。さらに詳しい情報が必要な方は、[SOCVR chatroom](http://chat.stackoverflow.com/rooms/41570/so-close-vote-reviewers)でお問い合わせください。 – Adriaan

関連する問題