引用元组列表中所有元组的第一个元素

时间:2013-07-11 18:52:10

标签: python list tuples

问题标题几乎就是我想知道的!

说我有一个元组列表:

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()的困境

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

谢谢,

亚历

2 个答案:

答案 0 :(得分:2)

,这是可能的。

使用列表理解:

>>> 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])

答案 1 :(得分: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])