【问题标题】:efficient way of looping through second argument of tuple for a condition and returning first argument of tuple循环遍历元组的第二个参数以获取条件并返回元组的第一个参数的有效方法
【发布时间】:2017-05-12 17:25:58
【问题描述】:

我的列表

[('cat', 1), ('dog', 2), ('cat', 2)]

我想遍历 my_list 中元组的第二个参数(整数)以查看其中任何一个等于说 value = 1,如果是,则返回包含 value = 1 的元组的第一个参数。

    from operator import itemgetter
    for a in map(itemgetter(1), my_list):
        if a == 1:
            idx = map(itemgetter(1),my_list).index(a)  
            print map(itemgetter(0),my_list)[idx]
            #cat

有没有更有效的方法来完成上述操作?

【问题讨论】:

    标签: python loops tuples


    【解决方案1】:

    您可以使用列表推导:

    result = [ x for x,y in my_list if y==1 ]
    

    【讨论】:

    • 你是对的@juanpa.arrivillaga 和 Moses Koledoye,我刚刚更新了答案
    【解决方案2】:

    您不必map(itemgetter(1), ...),而是解压元组

    >>> data = [('cat', 1), ('dog', 2), ('cat', 2)]
    >>> for animal, num in data:
    ...     if num == 1:
    ...         print(animal)
    ...
    cat
    >>>
    

    老实说,您甚至不需要拆包。您可以通过 indexing 直接使用元组:

    >>> for t in data:
    ...     if t[1] == 1:
    ...         print(t[0])
    ...
    cat
    >>>
    

    您使用itemgetter 对其进行了过度设计。没必要。

    关于解包,您可以在任何地方对元组执行此操作:

    >>> t = ('first', 'second')
    >>> f, s = t
    >>> f
    'first'
    >>> s
    'second'
    >>>
    

    或者真的有任何可迭代的:

    >>> a, b = [1,2]
    >>> a
    1
    >>> b
    2
    >>>
    

    虽然在某些情况下确实不可取:

    >>> a, b = {'a':2, 'b':1} # order will not be guaranteed!
    >>> a
    'b'
    >>> b
    'a'
    >>>
    

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多