我有两个列表:
list1 = ['a','d']
list2 = [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
我想追加list1或创建一个新列表,结果是:
[('a', '1'), ('d', '4')]
我尝试使用没有运气的索引。
答案 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]