Подтвердить что ты не робот

Удалить список из списка в Python

Возможный дубликат:
Получите разницу между двумя списками в Python

Что такое упрощенный способ сделать это? Я пытался самостоятельно, и я не могу понять. список a и список b, новый список должен иметь элементы, которые находятся только в списке a. Итак:

a = apple, carrot, lemon
b = pineapple, apple, tomato
new_list = carrot, lemon

Я пробовал писать код, но каждый раз он всегда возвращает весь список a мне.

4b9b3361

Ответ 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'])