繁体   English   中英

基于Python中两个嵌套列表的匹配元素创建新列表?

[英]Creating a new list based on matching elements of two nested lists in Python?

我有两个列表,每个列表包含每个都有两个元素的多个子列表。 我想创建一个新列表,该列表仅包含两个原始列表中都存在该子列表的第一个元素的那些子列表。 我可以使用列表理解或设置交集在平面列表中执行此操作,但是在使用列表列表时会遇到困难。

例如(使用csv文件中的数据):

apairs = [['apple', '2.4\n'], ['banana', '2.3\n'], ['orange', '1.8\n'], 
          ['apple', '1.6\n']]
bpairs = [['grape', '2.3\n'], ['apple', '2.1\n'], ['apple', '2.0\n'],
          ['peach', '1.9\n'], ['plum', '1.5\n']]

我想创建一个新列表,该列表仅包含两个列表,其中子列表的第一个元素同时存在于两个外部列表中,并且仅包含与元素对的第一个实例。 我希望从“ alist”中提取该对,使其包含该对的第二个元素。 所以我在这种情况下的期望输出是:

intersectpairs = [['apple, '2.4\n']]

任何帮助,将不胜感激!

intersectpairs = []
bfruits = set()

for i in range(0,len(bpairs)):
    bfruits.add(bpairs[i][0])

for i in range(0,len(apairs)):
    if apairs[i][0] in bfruits:
       intersectpairs.append(apairs[i])

print (intersectpairs)

您可以简单地遍历两个列表并比较值。 相同的示例代码片段是:

apairs = [['apple', '2.4\n'], ['banana', '2.3\n'], ['orange', '1.8\n']]
bpairs = [['grape', '2.3\n'], ['apple', '2.1\n'], ['peach', '1.9\n'], ['plum',     '1.5\n']]
intersectpairs = []
for i in apairs:
    for j in bpairs:
        if (i[0]==j[0]):
            intersectpairs.append(i)
print(intersectpairs)

[['apple', '2.4\n']]

或者,如果您想使用列表理解

[i for i in apairs for j in bpairs if(i[0]==j[0])] 

这将返回两个列表中都具有匹配元素的列表列表。

列表理解如何?

from operator import itemgetter

first = itemgetter(0)

[val for val in apairs if first(val) in map(first, bpairs)]

[['apple', '2.4\n']]

感谢大家的帮助! 我想出了一个基于@Mayank Mehtani答案的解决方案。 对于将来遇到此问题的人,此代码解决了该问题:

intersectionpairs = []
intersectionfruits = []
bfruits = set()

for i in range(0,len(bpairs)):
    bfruits.add(bpairs[i][0])
print('bfruits:', bfruits)
for i in range(0,len(apairs)):
    if apairs[i][0] in bfruits and apairs[i][0] not in intersectionfruits:
        intersectionfruits.append(apairs[i][0])
        intersectionpairs.append(apairs[i])

可能不是最有效或最复杂的答案,但它会提供所需的输出!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM