4

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

假设我有一个元组列表:

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

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

谢谢,

亚历克斯

4

2 回答 2

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_listdict

>>> dic = dict(first_list)
>>> set(second_list).difference(dic)
set([4, 5])
于 2013-07-11T18:53:25.597 回答
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])
于 2013-07-11T18:53:53.003 回答