![](/img/trans.png)
[英]Collect elements from a list of lists based on the first elements of each group
[英]Retrieve lists from a list of lists based on the given first elements
list1 = [1, 3, 5, 7]
list2 = [[1, "name1", "sys1"], [2, "name2", "sys2"], [3, "name3", "sys3"], [4, "name4", "sys4"]]
我有以下 2 个列表,我希望能够从 list2 中检索在 list1 中匹配的每个项目。
所以,结果会是这样的:
result = [[1, "name1", "sys1"], [3, "name3", "sys3"]]
另外还有一种简单的方法可以找出不匹配的项目,
notmatch = [5, 7]
我读过这个查找两个列表的交集? 但它不会产生我需要的结果。
>>> ids = set(list1)
>>> result = [x for x in list2 if x[0] in ids]
>>> result
[[1, 'name1', 'sys1'], [3, 'name3', 'sys3']]
>>> ids - set(x[0] for x in result)
{5, 7}
In [3]: result=[i for i in list2 if i[0] in list1]
Out[4]: [[1, 'name1', 'sys1'], [3, 'name3', 'sys3']]
In [5]: nums=[elem[0] for elem in result]
In [6]: [i for i in list1 if i not in nums]
Out[6]: [5, 7]
使用
set
来查找索引:它将有更快的查找时间:
>>> indices = set(list1)
匹配项:
>>> matching = [x for x in list2 if x[0] in indices]
>>> matching
[[1, 'name1', 'sys1'], [3, 'name3', 'sys3']]
不匹配的项目:
>>> nonmatching = [x for x in list2 if x[0] not in indices]
>>> nonmatching
[[2, 'name2', 'sys2'], [4, 'name4', 'sys4']]
list1 = [1, 3, 5, 7]
list2 = [[1, "name1", "sys1"], [2, "name2", "sys2"], [3, "name3", "sys3"], [4, "name4", "sys4"]]
result = []
for elem in list1:
for x in range(len(list2)):
if elem == list2[x][0]:
result.append(list2[x])
print(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.