Создание нового списка на основе сопоставления элементов двух вложенных списков в Python? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть два списка, каждый из которых содержит несколько подсписков по два элемента в каждом.Я хочу создать новый список, который содержит только те подсписки, где первый элемент подсписка существовал в обоих исходных списках.Я могу сделать это в плоских списках, используя понимание списка или установить пересечения, но бороться, когда это происходит со списками списков.

Например (используя данные из файла 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']]

Любая помощь будет оценена!

Ответы [ 4 ]

0 голосов
/ 06 февраля 2019

Спасибо за помощь всем!Я нашел решение, основанное на ответе @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])

Может быть не самый эффективный или сложный ответ, но он дает желаемый результат!

0 голосов
/ 06 февраля 2019

Вы можете просто перебрать оба списка и сравнить значение.Пример кода для этого кода:

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])] 

Это вернет список списка с соответствующим элементом в обоих списках.

0 голосов
/ 06 февраля 2019

Как насчет понимания списка?

from operator import itemgetter

first = itemgetter(0)

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

[['apple', '2.4\n']]
0 голосов
/ 06 февраля 2019
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...