我在一个列表中有两个元组,我想在其中比较它们的第二个元素。我知道有几种方法可以实现这一点。
做这件事的惯用方法是什么?
我认为您编写的代码是最"优雅的";或者只要代码的读者很清楚results
的内容,就很容易阅读。如果你想给他提供更多提示(例如,如果results
的内容可能令人困惑等(,你可以在结果中命名变量:
(_, height_a), (_, height_b) = results
height_a == height_b
注意,只有当results
是一对时,这才有效,如果结果中有多对,可以通过以下方法解决:
(_, height_a), (_, height_b), *_ = results
OK,目前有5种可能性:
import timeit
results = [(3, 2), (1, 2)]
print("#1", timeit.timeit(
'''(_, a), (_, b) = results
a == b''',
globals=globals(), number=10000000))
print("#2", timeit.timeit(
'''(_, a), (_, b), *_ = results
a == b''',
globals=globals(), number=10000000))
print("#3", timeit.timeit(
'''results[0][1] == results[1][1]''',
globals=globals(), number=10000000))
print("#4", timeit.timeit(
'''len({r[1] for r in results}) == 1''',
globals=globals(), number=10000000))
print("#5", timeit.timeit(
"len(set(list(zip(*results))[1])) == 1",
globals=globals(), number=10000000))
除非我做错了什么,否则在2个元组的列表中,第一种方法是最快的,否则只使用
#1 0.6181712869999999
#2 1.597160365
#3 1.093676446
#4 3.0940490819999997
#5 4.806052006