【问题标题】:Tuples element comparison [closed]元组元素比较[关闭]
【发布时间】:2022-12-17 19:30:50
【问题描述】:

我在列表中有两个元组,我想在其中比较它们的第二个元素。 这样做的惯用方式是什么?

【问题讨论】:

  • 列表的大小是否总是为 2 而要考虑的元素总是排在第二位还是它们可以变化?
  • 一种更优雅的方式......我不这么认为。就这样保持下去吧,它简单易懂。
  • 也许如果我们看到上下文,我们可以展示更好的东西。但在没有上下文的情况下,我同意@Shinra tensei 的观点。
  • 是的,我只是又多了一个想法似乎更优雅。

标签: python tuples compare


【解决方案1】:

我认为只要代码的读者清楚 results 的内容是什么,您编写的代码就是最“优雅”或易于阅读的代码。如果你想给他提供更多提示(例如results 的内容可能会让人混淆等),你可以在结果中命名变量:

(_, height_a), (_, height_b) = results
height_a == height_b

请注意,这仅在 results 是一对时才有效,如果结果中有多对,您可以通过以下方式解决:

(_, height_a), (_, height_b), *_ = results

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

    • 另一个:len({r[1] for r in results}) == 1(不好,但恕我直言,更好的解决方案)。
    • 好的,那么有 5 个解决方案。
    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2014-02-20
    • 2016-03-25
    • 1970-01-01
    • 2015-08-01
    • 2021-12-05
    • 2015-07-28
    • 1970-01-01
    相关资源
    最近更新 更多