2017-11-26 15 views
-4

私は、Pythonで書かれた以下のような文字列のリストを持っています。私が今したいことは、各文字列 'hello'の後に文字列 'あなた'の出現回数を取得することです。出力は最初の2つのhelloの番号0、3番目の 'hello'の番号2、4番目の 'hello'の番号1などのようになります。リスト内の特定の項目の後に項目の数を取得する方法

どのように正確にそれを知っていますか?

my_list = ['hello', 'hello', 'hello', 'you', 'you', 'hello', 'you', 'hello', 
      'you', 'you', 'you', ...] 

更新:

list_counter = [] 
counter = 0 

# I reverse the list because the loop below counts the number of 
# occurences of 'you' behind each 'hello', not in front of it 
my_list_rev = reversed(my_list) 

for m in my_list_rev: 
    if m == 'you': 
     counter += 1 
    elif m == 'hello': 
     list_counter.append(counter) 
     counter = 0 

# reverse the output to match it with my_list  
list_counter = list(reversed(list_counter)) 

print(list_counter) 

この出力:

これは私がそれをどうやっている:カランElangovansアプローチも働くものの

は、それを自分で解決

[0, 0, 2, 1, 3] 
以下のための

:たぶん

my_list = ['hello', 'hello', 'hello', 'you', 'you', 'hello', 'you', 'hello', 
      'you', 'you', 'you'] 

ない最善のアプローチは、正しい出力を得るために結果を元のリストとリストの両方を逆にする必要があり、それは、この問題のために働くよう。

+0

をそれとも、他の誰かにプロセスを説明していた場合、あなたがそれを行うのと同じようにそれをコーディングして、私達にあなたの試みを表示して得るためにあなたの質問を編集しよう可能なよりよい答え。 – progmatico

+0

@JohnColeman宿題ではありません。ちょうど私が興味を持っていたのは、それぞれの人生の後に「あなた」の数を数えたいと思っていなかったからです。 – andr23

答えて

-1

は、このワンライナーを試してみてください:

reduce(lambda acc, cur: acc + ([] if cur[1] == 'you' else [next((i[0] - cur[0] - 1 for i in list(enumerate(my_list))[cur[0]+1:] if i[1] == 'hello'), len(my_list) - cur[0] - 1)]), enumerate(my_list), []) 

それは、n番目の要素は、「あなたののn番目の発生後 『』ハローの数である配列を与えるだろう。

my_list = ['hello', 'hello', 'hello', 'you', 'you', 'hello', 'you', 'hello', 'you', 'you', 'you']場合は、

それは与える:[0, 0, 2, 1, 3]

+0

ありがとう、私はそれを自分で解決しましたが、あなたのコードもうまくいきます。 – andr23

関連する問題