有没有办法在python的for循环中向前移动索引?例如,如果我正在迭代一个字符串并找到一些我正在寻找的字符,那么我可以在for循环的下一次迭代中从该位置开始读取吗?
就像读取x之后,读到y并从下一次迭代y后面的位置开始:
for i in range(len(myString)):
if myString[i] == 'x':
j = i + 1
while( myString[j] != '\n' ):
if( myString[j] == 'y' ):
i = j + 1 # start at position following y in string on the next iteration
j = j + 1
或者我是否必须使用while循环才能实现此目的?
答案 0 :(得分:2)
您可以在此示例代码中使用字符串而不是列表。它在列表的剩余部分找到第一个x,然后在'x'之后找到第一个y,依此类推
#mylist = [list to search]
i = 0
while true:
list_to_search = mylist[i:]
if 'x' not in list_to_search:
break
j = list_to_search.index('x')
if 'y' not in list_to_search[j+1:]:
break
i = list_to_search.index('y')
(x_pos,y_pos) = (j,i)
#your code
答案 1 :(得分:1)
您可以尝试使用无限循环:
<VehLocationFinderRQ Version="2.2.0">
<VehAvailRQCore>
<LocationDetails DropOff="false">
<Address>
<CityName>SOUTHLAKE</CityName>
<StateCountyProv StateCode="TX" />
<StreetNmbr>3150 SABRE DRIVE</StreetNmbr>
</Address>
</LocationDetails>
<LocationDetails DropOff="true">
<Address>
<CityName>DALLAS</CityName>
<StateCountyProv StateCode="TX" />
<StreetNmbr>MAIN ST</StreetNmbr>
</Address>
</LocationDetails>
<VehRentalCore PickUpDateTime="12-22T09:00" ReturnDateTime="12-29T11:00" />
</VehAvailRQCore>
</VehLocationFinderRQ>
答案 2 :(得分:1)
现在,实际上您仍然在这里使用while
循环 - 但我认为这与您的想法更接近:
def myrange(limit=0):
counter = 0
while counter < limit:
next = yield counter
try:
counter = int(next) - 1
except TypeError:
counter += 1
mylist = ['zero', 'one', 'two', 'five', 'four']
my_iter = myrange(len(mylist))
for i in my_iter:
print(mylist[i])
if mylist[i] == 'five':
print('-- three, sir! --')
mylist[i] = 'three!'
my_iter.send(i)
elif mylist[i] == 'four':
print("Don't count that number!")
这是因为生成器具有send
函数。它们允许您向生成器发送一个值,然后生成器可以按照它的意愿使用它。请注意,当您在生成器上调用.send()
时,它会产生下一个值(因此,当我们调用my_iter.send(i)
时,它实际上yield
显示下一个值。那个&#39} ;为什么我们致电counter = int(next) - 1
。另一种方法是将-1
放入for
圈。