【问题标题】:Python Best Practice for Looping Backwards in For Loop without reversing the array在 For 循环中向后循环而不反转数组的 Python 最佳实践
【发布时间】:2023-03-05 04:35:02
【问题描述】:

在解决 Leetcode 等问题时​​,通常需要从数组的末尾迭代到前面,我习惯于更传统的编程语言,其中 for 循环不那么尴尬,即 for(int i = n; i >= 0; i--) 其中n是数组的最后一个索引,但在 Python 中,我发现我正在做类似 for i in range(n,-1,-1) 的事情,这看起来有点尴尬,所以我只想知道是否有更优雅的东西。我知道我可以通过执行 array[::-1] 来反转数组,然后像往常一样使用 for range 循环,但这并不是我真正想要做的,因为它增加了问题的计算复杂性。

【问题讨论】:

标签: python


【解决方案1】:

使用reversed 不会创建新列表,而是创建一个反向迭代器,并允许您反向迭代:

a = [1, 2, 3, 4, 5]

for n in reversed(a):
     print(n)

【讨论】:

    【解决方案2】:

    只是三种方法的比较。

    array = list(range(100000))
    def go_by_index():
        for i in range(len(array)-1,-1,-1):
            array[i]
    
    def revert_array_directly():
        for n in array[::-1]:
            n
    
    def reversed_fn():
        for n in reversed(array):
            n
    
    
    %timeit go_by_index()
    %timeit revert_array_directly()
    %timeit reversed_fn()
    

    输出

    100 loops, best of 3: 4.84 ms per loop
    100 loops, best of 3: 2.01 ms per loop
    1000 loops, best of 3: 1.49 ms per loop
    

    时间差是可见的,但正如您所见,第二个和第三个选项差别不大,特别是如果感兴趣的数组是小型或中等大小的。

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 2012-09-20
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多