问题标题几乎就是我想知道的!
说我有一个元组列表:
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()的困境
与往常一样,如果我能以任何方式改进/澄清问题,请发表评论。
谢谢,
亚历
答案 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])