python:迭代列表中的特定范围

ccw*_*te1 25 python iteration

让我们说我有一个清单:

listOfStuff =([a,b], [c,d], [e,f], [f,g])
Run Code Online (Sandbox Code Playgroud)

我想要做的是以类似于以下代码的方式遍历中间2组件:

for item in listOfStuff(range(2,3))
   print item
Run Code Online (Sandbox Code Playgroud)

最终结果应该是:

[c,d]
[e,f]
Run Code Online (Sandbox Code Playgroud)

此代码目前不起作用,但我希望您能理解我想要做的事情.

eum*_*iro 40

listOfStuff =([a,b], [c,d], [e,f], [f,g])

for item in listOfStuff[1:3]:
    print item
Run Code Online (Sandbox Code Playgroud)

你必须遍历你的元组片段.这1是你需要的第一个元素,3(实际上是2 + 1)是你不需要的第一个元素.

列表中的元素从0开始计算:

listOfStuff =([a,b], [c,d], [e,f], [f,g])
               0      1      2      3
Run Code Online (Sandbox Code Playgroud)

[1:3] 采用元素1和2.


mar*_*eau 8

迭代一个列表片段的更有效内存的方法是islice()itertools模块中使用:

from itertools import islice

listOfStuff = (['a','b'], ['c','d'], ['e','f'], ['g','h'])

for item in islice(listOfStuff, 1, 3):
    print item

# ['c', 'd']
# ['e', 'f']
Run Code Online (Sandbox Code Playgroud)

然而,如果范围的起始值是大值,则在性能方面这可能是相对低效的,因为islice在返回项之前必须迭代第一起始值-1项.

  • 警告:可能*非常低效.例如,`islice(list1,100000,11001)`将*首先*迭代前99,999个值(只是不会返回它们).使用cProfile自己尝试一下; 它也在文档中. (2认同)