我想将电子邮件比较到两个列表并放入新列表
a = [('abc@gmail.com',5),('xyz@gmail.com',6),('pqr@gmail.com',8)]
b = [('ABC','abc@gmail.com'),('XYZ','xyz@gmail.com'),('PQR','pqr@gmail.com')]
例如,将返回[('ABC',5),('XYZ',6),('PQR',8)]
。
答案 0 :(得分:3)
在每个项目的列表中查找(如果尚未订购)是O(n)复杂性并且不是该过程的理想数据结构
如果您将用于查找的列表转换为字典
,那将是有益的d_a = dict(a)
之后查找既高效又优雅
>>> [(key, d_a[value]) for key, value in b if value in d_a]
[('ABC', 5), ('XYZ', 6), ('PQR', 8)]
当查找键可能不匹配或存在于查找列表中时,您还应该考虑否定的情况
答案 1 :(得分:2)
对两个列表进行排序并使用列表推导:
a = [('abc@gmail.com',5),('xyz@gmail.com',6),('pqr@gmail.com',8)]
b = [('ABC','abc@gmail.com'),('XYZ','xyz@gmail.com'),('PQR','pqr@gmail.com')]
result = [(y[0],x[1]) for x,y in zip(sorted(a,key=lambda s:s[0])), sorted(b,key=lambda s:s[1])) if x[0]==y[1]]
list a
根据每个元组的第一个元素(s[0]
)进行排序。
list b
根据每个元组的第二个元素(s[1]
)进行排序。