【问题标题】:Referring to the first element of all tuples in a list of tuples引用元组列表中所有元组的第一个元素
【发布时间】:2013-07-11 18:52:09
【问题描述】:

问题标题正是我想知道的!

假设我有一个元组列表:

tuple_list = [(1,'a'),(2,'b'),(3,'c')]

我会用什么来引用 tuple_list 的所有第一个元素?我想要返回的是第一个元素的列表。就像 tuple_list.keys() 如果它是字典一样会起作用。像这样:

(tuple_list expression here) = [1,2,3]

这可能吗?是否有一个简单的表达式,还是我必须遍历 tuple_list 并以这种方式创建一个单独的第一个元素列表?

此外,我想要这样做的原因是因为我想要执行以下操作:

first_list = [(1,'a'),(2,'b'),(3,'c')]
second_list = [1,2,3,4,4,5]

third_list = set(second_list) - set(first_list(**first elements expression**)) = [4,5]

我正在针对一些使用字典的旧代码中的列表进行调整:

first_dict = {1:'a',2:'b',3:'c'}
second = [1,2,3,4,4,5]

third_dict = set(second) - set(first_dict.keys()) = [4,5]

因此我的困境是缺少 .key() 用于列表

与往常一样,如果我能以任何方式改进/澄清问题,请发表评论。

谢谢,

亚历克斯

【问题讨论】:

    标签: python list tuples


    【解决方案1】:

    是的,有可能。

    使用列表推导:

    >>> tuple_list = [(1,'a'),(2,'b'),(3,'c')]
    >>> [x[0] for x in tuple_list]
    [1, 2, 3]
    

    或:

    >>> from operator import itemgetter
    >>> f = itemgetter(0)
    >>> map(f, tuple_list)
    [1, 2, 3]
    

    你的例子:

    >>> first_list = [(1,'a'),(2,'b'),(3,'c')]
    >>> second_list = [1,2,3,4,4,5]
    >>> set(second_list) - set(x[0] for x in first_list)
    set([4, 5])
    >>> set(second_list) - set(map(f, first_list))
    set([4, 5])
    

    或者正如@JonClements 所建议的,这会更快:

    >>> set(second_list).difference(map(f, first_list))
    set([4, 5])
    

    请注意,如果您多次执行此操作,则可以将 first_list 转换为 dict

    >>> dic = dict(first_list)
    >>> set(second_list).difference(dic)
    set([4, 5])
    

    【讨论】:

    • 优雅的解决方案,虽然我想当真正必须做这样的事情时没有多少人会记得它
    • 我已经编辑了问题,所以您能否确认在上面提出的应用程序中我可以做到:f = itemgetter(0)third_list = set(second_list) - set(map(f, first_list)) = [4,5]??
    • first_list 转换为字典而不是重复使用map(f, first_list) 有什么好处?
    【解决方案2】:

    你可以试试这个列表理解:

    tuple_list = [(1,'a'),(2,'b'),(3,'c')]
    desired_list = [ x for x, _ in tuple_list ] 
    

    你也可以使用map:

    desired_list = map(lambda(x,_):x, tuple_list)
    

    根据您的编辑,您可以这样做:

    >>> first_list = [(1,'a'),(2,'b'),(3,'c')]
    >>> second_list = [1,2,3,4,4,5]
    >>> third_list = set(second_list).difference(x for x, _ in first_list)
    >>> third_list
    set([4, 5])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 2023-03-03
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      相关资源
      最近更新 更多