https://stackoverflow.com/a/9868665/433570找到第一项。
在应用上面的解决方案之前,我可以考虑先做reverse
。
但是我最终会得到两个可以避免的 reverse
。
有没有比使用两个 reverse
和 next
更好的解决方案?
最佳答案
我不想反转列表,这可能是一个冗长的操作 (l.reverse()
),因为它反转了整个列表,我只是使用 < strong>reversed iterator reversed(l)
使用任何你想要的匹配方法,因为你可以在第一次匹配时提前停止,与反转整个列表相比,它可以节省你的时间。
当然,这两种方法都有最好的情况和最坏的情况,下面可能会根据匹配项在列表中的位置(例如接近结尾、开头或中间)给你一个想法
In [1]: l = range(0, 100000)
In [2]: %timeit next((i for i in reversed(l) if i == 1), None)
100 loops, best of 3: 2.94 ms per loop
In [3]: %timeit next((i for i in reversed(l) if i == 50000), None)
1000 loops, best of 3: 1.39 ms per loop
In [4]: %timeit next((i for i in reversed(l) if i == 99000), None)
10000 loops, best of 3: 29.4 µs per loop
下面是反转同一个列表需要多长时间的想法:
In [5]: %timeit l.reverse()
10000 loops, best of 3: 71.5 µs per loop
注意:我在 Python 2 上面运行,所以 range()
是一个列表而不是迭代器,所以不需要 list(range ())
它使比较有值(value)。
关于python - 在 Python 中查找与条件匹配的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37966943/