将while循环转换为for循环

时间:2012-06-26 02:38:38

标签: python loops

  

将以下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所以我知道我的范围从(0 ... 15)不包括15所以基本上我们会像i = range(15)那样我们会有类似的东西:

for i in range(15):

我不知道j在那里做了什么。

2 个答案:

答案 0 :(得分:3)

我会假设你打算写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个元素,每次遇到'***'时,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

答案 1 :(得分:2)

j = [i for i,x in enumerate(string_list) if x=='***'][15]
return j

lazy版本的灵感来自Peter和astynax的评论

from itertools import islice
j = next(islice((i for i,x in enumerate(string_list) if x=='***'), 15, None))
return j