【问题标题】:Python - How do I start an iteration from the n^th item of an iterable, and finish it on the n-1^th one? [duplicate]Python - 如何从可迭代的第 n 个项目开始迭代,并在第 n-1 个项目完成? [复制]
【发布时间】:2021-03-07 03:48:43
【问题描述】:

假设我有一个类似a = ["dog", "cat", "house", "mouse", "goose"] 的列表。如果我想在 a[3] 开始一个 for 循环并在 a[2] 结束它,我该怎么做? a[3:2] 当然会返回一个空列表,所以我无法对其进行迭代。有没有比迭代a[3:]+a[:3] 更 Pythonic 的方法?

明确地说,我想要的是有一个从 a[n] 开始的 for 循环,然后转到 a[n+1]a[n+2] 等直到列表末尾;然后,当到达列表的最后一个元素时,循环从a[0] 继续,一直持续到a[n-1](与a[3:]+a[:3] 获得的相同)。

【问题讨论】:

  • 是的。您可以反向迭代。查找 ::-1。
  • 听起来a[n:] + a[:n] 就是你要找的东西。

标签: python list loops


【解决方案1】:

你可以这样做:

a = ["dog", "cat", "house", "mouse", "goose"]

print(a[3:2:-1])

输出将是:

['mouse']

显然,如果你想包含索引2,你必须写a[3:1:-1](最后的索引它并不像往常一样包含)


更新:更新请求后,这应该是你想要的

a = ["dog", "cat", "house", "mouse", "goose"]

print(a[3:] + a[:3])

输出将是:

['mouse', 'goose', 'dog', 'cat', 'house']

【讨论】:

    【解决方案2】:

    当你像这样对列表进行切片时(使用 a[3:-1]),最后一项是不包含的。 因此,如果您的元素最多需要但不包括最后一个元素,那么 -1 应该适合您。 如果你想要最多但不包括最后 2 个元素,那么 -2 可以在这里工作。

    例如,对于:

    a = ["dog", "cat", "house", "mouse", "goose"]
    a[3:-1]
    

    输出将是:["mouse"]。

    请记住,列表的索引从 0 开始。 所以你的列表有索引从 0 到 4 的元素。 从第 3 个到倒数第二个元素打印只是打印第 3 个元素,因为它也是倒数第二个元素。

    【讨论】:

    • 这不是 OP 要求的(见最后一段)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2011-02-11
    • 2010-12-27
    • 2018-05-12
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多