Python 如何使循环从列表的中间迭代到开头?
我试图使用Python 如何使循环从列表的中间迭代到开头?,python,Python,我试图使用for I in range()循环,使循环从列表索引的中间到开始在列表中迭代。我该怎么做?假设我们有一份清单 a = ['apple', 'peach', 'orange', 'melon', 'banana'] 如何从'orange'迭代到'apple' 我的预测是: for i in range(a[orange], 0) 我是编程新手,很抱歉有个明显的问题 怎么样 for fruit in list(reversed(fruit_list))[2:]: print
for I in range()
循环,使循环从列表索引的中间到开始在列表中迭代。我该怎么做?假设我们有一份清单
a = ['apple', 'peach', 'orange', 'melon', 'banana']
如何从'orange'
迭代到'apple'
我的预测是:
for i in range(a[orange], 0)
我是编程新手,很抱歉有个明显的问题 怎么样
for fruit in list(reversed(fruit_list))[2:]:
print(fruit)
?
尽管可以使用带负步长的切片表示法来反转iterable,但Python提供了方便且可读的reversed
内置函数来执行同样的操作。从那里,您可以直接切到您想要的列表部分
这也更像python,因为您直接迭代列表中的元素。通常,在for循环中,您不需要自己跟上索引的进度。怎么样
for fruit in list(reversed(fruit_list))[2:]:
print(fruit)
?
尽管可以使用带负步长的切片表示法来反转iterable,但Python提供了方便且可读的reversed
内置函数来执行同样的操作。从那里,您可以直接切到您想要的列表部分
这也更像python,因为您直接迭代列表中的元素。通常,您不需要在for循环中自己跟上索引的进度。切片在这里工作得很好:
>>> 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
部分表示向后迭代。切片在这里工作得很好:
>>> 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
部分表示向后迭代。您就快到了。。。使用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
对于列表中找不到值的情况,您可能需要添加一些错误处理,例如:
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
如果您真的非常想使用范围
,则从索引开始,递减-1,直到列表的开头(因为末尾不包括在范围内,所以它是-1
),例如:
你就快到了。。。使用
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
对于列表中找不到值的情况,您可能需要添加一些错误处理,例如:
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
如果您真的非常想使用范围
,则从索引开始,递减-1,直到列表的开头(因为末尾不包括在范围内,所以它是-1
),例如:
首先,您按索引(索引从零开始)遍历列表,因此
a[orange]
(或者a[“orange”]
,就这一点而言)将导致错误。因为[“orange”]世界生成字符串?因为a['orange']
是dict样式的访问,而不是列表样式的访问,并且会导致错误。“orange”
是a
的第三个元素。这意味着它位于索引2(索引从0开始,而不是1)。所以,a[2]==“orange”
。杰克,我能写一个范围(a[水果索引],a[0])吗?这样行吗?因为它将从任何索引开始迭代?首先,您按索引(索引从零开始)迭代列表,所以a[orange]
(或者a[“orange”]
,就这一点而言)将导致错误。因为[“orange”]世界产生字符串?因为a['orange']
是dict样式的访问,“橙色”是a
的第三个元素。这意味着它位于索引2(索引从0开始,而不是1)。所以,a[2]==“orange”
。杰克,我能写一个范围(a[水果索引],a[0])吗?这样行吗?因为它将从任何索引开始迭代?这将在Python3上失败,并导致Python2上没有迭代。请参阅本站点结尾处的for循环以生成反向运行的循环。这将在Python3上失败,并导致Python2上没有迭代。请参阅本站点结尾处的for循环以生成反向运行的循环,这实际上很好请注意,只有在不知道起点的情况下才有必要使用索引。如果事先知道,简单的反转和切片在这里可能更可读。(OP是编程的新手,没有说明这一点,因此这可能是对循环的过度复制。)请您解释一下您在这里做了什么:b=a[a.index('orange')::-1]这似乎是我要找的,我不需要其他任何东西。请注意,如果您不需要从from
函数中向后\u获取列表,您可以执行反向返回(lst[:lst.index(value)+1])
,这对某些人来说可能更直观,也可能不直观…@Simonlist
s有一个.index()
方法,它返回第一个匹配值的索引(在本例中为orange
,返回2)。因此,代码实际上是从第二个索引向后取的a[2::-1]
(代码-1的作用是什么)很好地将问题解码成一个干净的答案注意,只有在不知道起点的情况下才需要使用索引。如果事先知道,简单的反转和切片在这里可能更可读。(OP是编程的新手,没有说明这一点,因此这可能是对循环的过度复制。)请您解释一下您在这里做了什么:b=a[a.index('orange')::-1]这似乎是我要找的,我不需要其他任何东西。请注意,如果您不需要从from
函数中向后\u获取列表,您可以执行返回反向(lst[:lst.i