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

В настоящее время у меня есть этот очень уродливый условный оператор, который работает правильно, но я считаю его утомительным для добавления и выглядит плохо. Мне нужно добавить его вручную, я считаю, что это проблема, потому что я хочу добавить в черный список на основе функции в моем коде, поэтому ручного добавления больше недостаточно.

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

if "NEW" in lst[i][0] and "Pears" not in lst[i][0] and "Strawberries" not in lst[i][0] and "Oranges" not in lst[i][0] and "Cherries" not in lst[i][0] and "Plums" not in lst[i][0] and "Nectarines" not in lst[i][0] and "raspberries" not in lst[i][0] and "Apples" not in lst[i][0]:

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

Я уже пробовал создать черный список и пробовал:

lst = ['Broccoli', 'Chicken', 'Oranges', 'Apples', 'Squash', ' Salmon']

blacklist = ['Pears', 'Strawberries', 'Oranges']

#My actual lists are much longer

for i in range(len(lst)):
    for blacklisteditem in blacklist:
        if blacklisteditem in lst[i]:
            print("This item is not blacklisted, proceeding..")
        else:
            print("This item was blacklisted")

Но это возвращается:

This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item is not blacklisted, proceeding..
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted
This item was blacklisted

Ясно, что это не цель. Должно быть какое-то решение, которое я упускаю, может ли кто-нибудь мне помочь? Я просто хочу применить логику «если x не в lst:», но я хочу, чтобы x был несколькими элементами, предпочтительно теми, которые находятся в списке, или, возможно, строкой, к которой я мог бы добавить?

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

-1
Dingo 2 Дек 2017 в 17:23

1 ответ

Лучший ответ

Сделайте свой черный список набором и проверьте, нет ли пересечения с вашим списком (набор является непересекающимся ):

blacklist = {'Pears', 'Strawberries', 'Oranges'}
if blacklist.isdisjoint(lst):
    print("This item is not blacklisted, proceeding..")
else:
    print("This item was blacklisted")

Метод set.isdisjoint() возвращает {{X1} } только если нет общих элементов:

>>> lst = ['Broccoli', 'Chicken', 'Oranges', 'Apples', 'Squash', ' Salmon']
>>> blacklist = {'Pears', 'Strawberries', 'Oranges'}
>>> blacklist.isdisjoint(lst)
False
>>> blacklist.isdisjoint(['Broccoli', 'Chicken', 'Apples', 'Squash', ' Salmon'])
True

Ваша попытка не дождалась проверки всех элементов, внесенных в черный список; вы печатаете для каждого отдельного элемента , который вы тестируете. Вам нужно дождаться завершения цикла for, прежде чем делать вывод, что ни один из элементов blacklist не появился.

5
Martijn Pieters 2 Дек 2017 в 17:47