在python列表中加入常见项目

时间:2018-06-23 12:35:18

标签: python

我有两个列表:

list1 = ['a','d']
list2 = [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]

我想追加list1或创建一个新列表,结果是:

[('a', '1'), ('d', '4')]

我尝试使用没有运气的索引。

5 个答案:

答案 0 :(得分:3)

您可以使用filter()来过滤您感兴趣的元素:

list1 = ['a','d']
list2 = [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]

# operating on a set makes the lookups O(1) which is faster then O(n) for lists.
# List with few elements (4-5) are still better then a set() due to the overhead
# a set introduces
whatIwant = set(list1)

# python 2.x filter returns a list directly
list3 = filter(lambda x: x[0] in whatIwant,list2) 


print(list3)

输出:

[('a', '1'), ('d', '4')]

filter(function, iterable)在任何iterable上进行操作,并将函数应用于每个元素,并确定iterable的元素是否应位于输出(function(item) == True)中({{1 }})


对于python3:function(item) == False将返回一个迭代器,因此您需要将结果填充到filter(...)中以获取返回的列表。

答案 1 :(得分:2)

从键,值列表class MyTaskRunner(luigi.Task): logdir=luigi.Parameter(default=None) logpath=luigi.Parameter(default=None) rundate=luigi.Parameter(default=today) def __init__(self, *args, **kwargs): super(MyTaskRunner, self).__init__(*args, **kwargs) if self.logpath is None: self.logpath = "{}/{}".format(self.logdir, self.rundate) 中创建字典。

list2

字典看起来像这样:

>>> list1 = ['a', 'd']
>>> list2 = [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
>>> d2 = dict(list2)

获取>>> d2 {'a': '1', 'c': '3', 'd': '4', 'b': '2'} >>> d2['c'] '3' 中键的值。

list1

此外,您可能更喜欢数字数据,而不是编码为字符串的数字。在这种情况下,请使用

创建字典
>>> [(k, d2[k]) for k in list1]
[('a', '1'), ('d', '4')]

答案 2 :(得分:1)

这是一个解决方案

list1 = ['a','d'] 
list2 = [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
my_set = set(list1)
new_list = [(x, y) for x, y in list2 if x in my_set]

答案 3 :(得分:1)

如果将列表list2转换为字典,则您可以轻松完成自己想做的事情

>>> list1 = ['a','d']; list2 = [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')] 
>>> dict2 = dict(list2)
>>> list3 = [(e, dict2[e]) for e in list1]
>>> 
>>> list3
[('a', '1'), ('d', '4')]

答案 4 :(得分:0)

您只需使用列表理解即可实现:

list3 = [t for t in list2 if t[0] in list1]