分享
三行代码  ›  专栏  ›  技术社区  ›  alee18

Python在for循环中向后循环而不反转数组的最佳实践

  •  0
  • alee18  · 技术社区  · 1 周前

    在处理Leetcode等问题时,经常需要从数组的末尾迭代到前面,我习惯于使用更传统的编程语言,其中 for for(int i = n; i >= 0; i--) 哪里 n for i in range(n,-1,-1) 这看起来有点尴尬,所以我只想知道有没有更优雅的东西。我知道我可以通过 array[::-1] 然后像往常一样用for range循环,但这并不是我真正想要做的,因为它增加了问题的计算复杂性。

    2 回复  |  直到 1 周前
        1
  •  2
  •   Mark Meyer    1 周前

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

    a = [1, 2, 3, 4, 5]
    
    for n in reversed(a):
         print(n)
    
        2
  •  2
  •   kate-melnykova    1 周前

    只是三种方法的比较。

    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