如何使循环从列表的中间到开始迭代?

时间:2015-02-27 16:49:12

标签: python

我正在尝试使用for i in range()循环在列表中间的列表中循环迭代到开头。我该怎么办?假设我们有一个列表

a = ['apple', 'peach', 'orange', 'melon', 'banana'] 

我如何从'orange'迭代到'apple'

我的预测:

for i in range(a[orange], 0)

我是编程的新手,对这个显而易见的问题感到抱歉。

4 个答案:

答案 0 :(得分:4)

您几乎就在那里......使用list.index查找值,然后从列表中反转切片,例如:

a = ['apple', 'peach', 'orange', 'melon', 'banana']
b = a[a.index('orange')::-1]
# ['orange', 'peach', 'apple']

您可能想要在列表中找不到值的位置进行一些错误处理,例如:

try:
    b = a[a.index('not_in_list')::-1]
except ValueError:
    b = [] # or other sensible result

然后可能是辅助功能:

def backwards_from(lst, value):
    try:
        return lst[lst.index(value)::-1]
    except ValueError:
        return [] # or other sensible result

for item in backwards_from(a, 'orange'):
    print item
#orange
#peach
#apple

for item in backwards_from(a, 'cabbage'):
    print item
# nothing to print

如果你真的,真的想要使用range,那么你从索引开始,递减-1,直到列表的开头(-1,因为结尾不是'{1}}。 t包括在范围内),例如:

for idx in range(a.index('orange'), -1, -1):
    print a[idx]

答案 1 :(得分:2)

切片在这里很好用:

>>> a[len(a)//2::-1]
['orange', 'peach', 'apple']

所以,迭代对象:

>>> for fruit in a[len(a)//2::-1]:
...   print fruit
... 
orange
peach
apple

请注意len(a)//2是列表的长度除以2(截断为整数),切片的-1部分意味着向后迭代。

答案 2 :(得分:0)

怎么样

for fruit in list(reversed(fruit_list))[2:]:
    print(fruit)

虽然您可以使用带有负步骤[::-1]的切片表示法来反转可迭代,但Python提供了方便且可读的reversed内置函数来执行相同操作。从那里,你可以切片到你想要的列表部分。

这也是Pythonic,因为你直接遍历列表的元素。通常,您不需要在for循环中自己跟上索引。

答案 3 :(得分:0)

for x in range (len(list)/2,-1): print list[x]