Удалить список из списка в Python
Возможный дубликат:
Получите разницу между двумя списками в Python
Что такое упрощенный способ сделать это? Я пытался самостоятельно, и я не могу понять.
список a и список b, новый список должен иметь элементы, которые находятся только в списке a. Итак:
a = apple, carrot, lemon
b = pineapple, apple, tomato
new_list = carrot, lemon
Я пробовал писать код, но каждый раз он всегда возвращает весь список a мне.
Ответы
Ответ 1
Вы можете написать это, используя список, который говорит нам буквально, какие элементы должны быть в new_list
:
a = ['apple', 'carrot', 'lemon']
b = ['pineapple', 'apple', 'tomato']
# This gives us: new_list = ['carrot' , 'lemon']
new_list = [fruit for fruit in a if fruit not in b]
Или, используя цикл for:
new_list = []
for fruit in a:
if fruit not in b:
new_list.append(fruit)
Как вы можете видеть, эти подходы весьма схожи, поэтому Python также имеет списки, позволяющие легко создавать списки.
Ответ 2
Вы можете использовать set:
# Assume a, b are Python lists
# Create sets of a,b
setA = set(a)
setB = set(b)
# Get new set with elements that are only in a but not in b
onlyInA = setA.difference(b)
UPDATE
Как отметил iurisilvio и mgilson, этот подход работает только в том случае, если a
и b
не содержат дубликатов, и если порядок элементов не имеет значения.
Ответ 3
Будет ли это работать для вас?
a = ["apple", "carrot", "lemon"]
b = ["pineapple", "apple", "tomato"]
new_list = []
for v in a:
if v not in b:
new_list.append(v)
print new_list
Или, более кратко:
new_list = filter(lambda v: v not in b, a)
Ответ 4
Вам может понадобиться следующее:
a = ["apple", "carrot", "lemon"]
b = ["pineapple", "apple", "tomato"]
new_list = [x for x in a if (x not in b)]
print new_list
Ответ 5
Как насчет использования sets (или встроенного set
, так как Sets был устаревшим в 2.6)?
from sets import Set
a = Set(['apple', 'carrot', 'lemon'])
b = Set(['pineapple','apple','tomato'])
new_set = a.difference(b)
print new_set
дает выход
Set(['carrot', 'lemon'])