Python:进行for循环的索引

时间:2016-01-18 22:57:58

标签: python string loops indexing iteration

有没有办法在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循环才能实现此目的?

3 个答案:

答案 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圈。