Сравните два списка одинаковой длины и удалите по заданному значению c - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть два списка одинаковой длины, оба имеют 9 элементов

listA = ["spain","italy","germany","brazil","france","argentina","peru","bolivia","giappone"]
listB = [0,0,1,1,1,0,1,1,0]

Я хотел бы получить listA без значения '1' из спискаB:

listA = ["spain", "italy","argentina","giappone"]

Спасибо .

Ответы [ 4 ]

4 голосов
/ 16 февраля 2020

Это довольно хороший вариант использования для itertools.compress. С той разницей, что нам нужно инвертировать двоичные значения селекторов, в противном случае это будет идеальный вариант использования:)

from itertools import compress

list(compress(listA, map(lambda x: 1-x, listB)))
# ['spain', 'italy', 'argentina', 'giappone']

или для более простого Подход в этом случае можно использовать zip:

[x for x,y in zip(listA,listB) if not y]
# ['spain', 'italy', 'argentina', 'giappone']
4 голосов
/ 16 февраля 2020

Вы можете использовать zip.

listA = ["spain","italy","germany","brazil","france","argentina","peru","bolivia","giappone"]
listB = [0,0,1,1,1,0,1,1,0]
out=[x for x,y in zip(listA,listB) if y==0]
1 голос
/ 16 февраля 2020
listA = ["spain", "italy", "germany", "brazil",
         "france", "argentina", "peru", "bolivia", "giappone"]
listB = [0, 0, 1, 1, 1, 0, 1, 1, 0]
i = -1
for item in listB:
    i += 1
    if item == 0:
        print(listA[i])
0 голосов
/ 16 февраля 2020

Просто используйте zip:)

listA = ["spain", "italy", "germany", "brazil", "france", "argentina", "peru", "bolivia", "giappone"]
listB = [0, 0, 1, 1, 1, 0, 1, 1, 0]

getCountries = [i for (i,j) in zip(listA, listB) if j==0]  
'''
  i being all the countries and j being the value 0 or 1
  in this case gets all the countries only for j == 0 or you could do j != 1
'''
print(getCountries)

Вывод:

['spain', 'italy', 'argentina', 'giappone']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...