Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使循环从列表的中间迭代到开头?_Python - Fatal编程技术网

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])
,这对某些人来说可能更直观,也可能不直观…@Simon
list
s有一个
.index()
方法,它返回第一个匹配值的索引(在本例中为
orange
,返回2)。因此,代码实际上是从第二个索引向后取的
a[2::-1]
(代码-1的作用是什么)很好地将问题解码成一个干净的答案注意,只有在不知道起点的情况下才需要使用
索引。如果事先知道,简单的反转和切片在这里可能更可读。(OP是编程的新手,没有说明这一点,因此这可能是对循环的过度复制。)请您解释一下您在这里做了什么:b=a[a.index('orange')::-1]这似乎是我要找的,我不需要其他任何东西。请注意,如果您不需要从
from
函数中向后\u获取
列表,您可以执行
返回反向(lst[:lst.i