1

将以下 while 循环转换为 for 循环。您的代码应该这样编写,以便不需要更改 return 语句。您可以在 while 循环正确之前更改代码。string_list 是包含至少 15 个字符串实例的字符串列表'***'

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

我首先尝试这样做,它说while i<15i = i+1所以我知道我的范围从(0...15)不包括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元素,每次'***'遇到an 时i都会递增。i循环将在到达时终止15,并且由于给出了string_list包含至少 15 个副本的前提条件,'***'我们确实希望循环应该终止。

当循环终止时,i将等于15并且j将简单地计算列表中的元素数,直到这一点。

因此,首先,您可以尝试像这样进行迭代:

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

受彼得和 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 回答