1

次のwhileループをforループに変換します。returnステートメントを変更する必要がないように、コードを作成する必要があります。whileループが適切になる前にコードを変更できます。string_listは、文字列の少なくとも15個のインスタンスを含む文字列のリストです。'***'

j=0 
while i<15: 
  if string_list[j] ='***': 
    i +=1 
  j +=1 
return j 

私は最初にこれを試してみましたが、それはi<15i = i+1が15を含まない(0 ... 15)の範囲であることを知っているので、基本的には次のi = range(15)ようになります。

for i in range(15):

それがそこで何をしているのかわかりませんj

4

2 に答える 2

4

string_list[j] == '***'の代わりに書くつもりだったと思いますstring_list[j] ='***'iまた、が に初期化されていると仮定し0ます。

i, j = 0, 0 
while i < 15: 
  if string_list[j] == '***': 
    i += 1 
  j += 1 
return j 

最初のステップは、ループが実際に何をしているのかを理解することです。要素を反復処理しており、が検出string_listされるたびにインクリメントされます。ループは に達すると終了します。少なくとも 15 個の のコピーを含む前提条件が与えられているため、ループが終了するはずです。 '***'ii15string_list'***'

ループが終了すると、とi等しくなり、この時点までのリスト内の要素の数が単純にカウントされます。 15j

したがって、最初に、次のように繰り返してみることができます。

for s in string_list:
  if s == `***`:
    # keep track of how many times this has happened
    # break if you've seen it happen 15 times
  j += 1
return j
于 2012-06-26T05:28:22.350 に答える
2
j = [i for i,x in enumerate(string_list) if x=='***'][15]
return j

Peterとastynaxからのコメントに触発された怠惰なバージョン

from itertools import islice
j = next(islice((i for i,x in enumerate(string_list) if x=='***'), 15, None))
return j
于 2012-06-26T03:18:31.787 に答える