我正在尝试使用for i in range()
循环在列表中间的列表中循环迭代到开头。我该怎么办?假设我们有一个列表
a = ['apple', 'peach', 'orange', 'melon', 'banana']
我如何从'orange'
迭代到'apple'
?
我的预测:
for i in range(a[orange], 0)
我是编程的新手,对这个显而易见的问题感到抱歉。
答案 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]