将以下while循环转换为for循环。应编写代码,以便不需要更改return语句。您可以在while循环之前更改代码。 string_list是一个字符串列表,其中至少包含15个字符串
的实例'***'
j=0
while i<15:
if string_list[j] ='***':
i +=1
j +=1
return j
我首先尝试这样说i<15
和i = i+1
所以我知道我的范围从(0 ... 15)不包括15所以基本上我们会像i = range(15)
那样我们会有类似的东西:
for i in range(15):
我不知道j
在那里做了什么。
答案 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