[英]Python creating a new list that contains elements not equal to elements of the same index of two other lists
[英]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.