【问题标题】:How to iterate through a list in Python without using a "for" loop? [closed]如何在不使用“for”循环的情况下迭代 Python 中的列表? [关闭]
【发布时间】:2023-02-26 00:48:36
【问题描述】:

我想打印所有的元素范围从 2 到 8 然后使用为了环形:

例如:

for i in range(2,8):
    print(i)

不使用 a 进行迭代的最佳方法是什么为了, 或者尽管循环,这减少了时间复杂度

【问题讨论】:

标签: python


【解决方案1】:

使用递归怎么样?

def iterate(lst, start, end):
  if start < 0 or end >= len(lst) or start > end:
    return
  print(lst[start])
  iterate(lst, start + 1, end)

像这样称呼它:

iterate([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 2, 8)

【讨论】:

  • 非常好的解决方案。也许您应该针对任何开始和结束索引概括您的函数。
  • @pzp 谢谢!我更新了我的答案:)
【解决方案2】:

让我们看看这个示例列表:

>>> mylist
['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']

现在,让我们不循环地打印元素 2 到 8:

>>> ' '.join(mylist[2:9])
'two three four five six seven eight'

在这里,2:9 告诉 python 使用以 2 开头并继续到 but 的索引不是包括9

【讨论】:

  • 谢谢!假设我有一个包含 20 个数字的列表,如何在不使用循环的情况下获得 2 到 9 之间数字的总和?
  • @Falcon2908,这是一个完全不同的问题。请提交一个新的。
  • x = range(20); sum(x[2:10])
  • @Falcon2908 这是一个单独的问题,因此您应该自己弄清楚(与 John1024 给您的代码的逻辑跳转不是太大)或提出一个新问题。
  • @Falcon2908 请查看我的答案以求总和。
【解决方案3】:

通过切片列表

>>> l = [1,2,3,4,5,6,7,8,9,10]
>>> print(l[1:8])
[2, 3, 4, 5, 6, 7, 8] # output in console

要获取 l[1:8] 中值的总和,请使用 sum

>>> sum(l[1:8])
35 # output

由于@pzp而编辑:

如果要打印索引 2 和索引 8 之间的所有元素(包括索引 2 和索引 8),只需将上面代码中的 print(l[1:8]) 替换为 print(l[2:9]) 即可。

【讨论】:

  • 看起来您的切片索引中有一个差一错误。
  • @pzp 不,我确实故意选择了 [1:8] 因为我想在列表l 中列出 2 到 8。我知道在 Python 中索引从 0 开始。
  • OP 要求“索引 2 和 8 之间的元素”(不是值 2 和 8),您的答案给出了索引 1 和 8 之间的元素。
  • @Ralf17,如果您使用 sum() 函数,它的行为是否类似于复杂度为 O (n) 的 for 循环?
  • @Falcon2908:你不能比遍历每个元素更快地对n 元素列表求和。
【解决方案4】:

使用列表理解的简单解决方案

list1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
sum1 = sum([i for i in list1 if i > 2 and i < 9])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2013-03-29
    • 2018-03-18
    • 2015-04-24
    • 2017-12-09
    • 2020-09-16
    相关资源
    最近更新 更多