преобразование моего длинного заявления в понимание списка

1

В настоящее время у меня есть такое выражение, которое отлично работает:

if (l['key'] != "0") and (l['key'] != "") and (l['key'] != 'm3u8') and ('HIT' not in k['key']) :

im new, чтобы перечислить понимание, поэтому вместо добавления (l ['key']! = "something") каждый раз, когда я хочу исключить расширение, я пытался это сделать:

ext_group=["",'m3u8','0']
url_strings =['m3u8','test1','0','gif','potato']

if any(ext not in url_strings for ext in ext_group):

но это не работает. обычно в цикле я могу просто сказать "print ext", но в этом случае будет ошибкой сказать, что я не определил его. Если я попытаюсь распечатать url_strings, он распечатает полный список, а не только те элементы, которые не были отфильтрованы.

Что я сделал здесь неправильно или чего не понимаю?

EDIT попытался сделать это, но также не фильтровал, не фильтруя, я имею в виду, что я все еще вижу значения "", "m3u8", "0", напечатанные l ['key']

for ext in ext_group:
     if (l['key']!= ext) and ('HIT' not in k['key']) :
         print l['key']
  • 2
    Если вы хотите сделать что - то для каждого ext , который соответствует, вы не можете использовать any для этого. Смысл any том, что вы выбрасываете всю информацию, кроме того, было ли какое-либо совпадение. Если вы не хотите , чтобы сделать это, напишите , что вы хотите. Например, (ext for ext in ext_group if ext not in url_strings) дает вам итерируемое из всех совпадений, а не просто, было ли оно или нет. И если вы поставите это в квадратных скобках вместо паренов, вы получите список всех совпадений.
  • 1
    Я поработаю над ответом, но по сути область действия ext находится только внутри any() который возвращает Bool. При текущей настройке он вернет true если одна или несколько строк в ext_group отсутствуют в url_strings . Это то, что вы намерены?
Показать ещё 2 комментария
Теги:
list-comprehension

1 ответ

0

По моему мнению, вы пытаетесь отфильтровать объект JSON из ключей, если это значение находится вокруг ['','m3u8','0'] и другого объекта JSON, который имеет значение для "ключа" в качестве списка и списка не должен иметь 'HIT' как элемент.

То, что вы пробовали в своем понимании списка, почти правильно, но была ошибка в понимании понимания списка.

Рассмотрим приведенный ниже код:

ext_group=["",'m3u8','0']
url_strings =['m3u8','test1','0','gif','potato']

proper_values = []
for ext in url_strings:
    if ext not in ext_group:
        proper_values.append(ext)

Это то, что вы намерены делать в списке понимания, но вы включили в списки, который должен повторяться в for loop и должны быть проверены на, if условия.

Вместо

if any(ext not in url_strings for ext in ext_group)

вы должны были пойти с

if any ([ext for ext in url_strings if ext not in ext_group])

Вы также можете добавить свое второе условие в ту же проверку. Что-то вроде,

if any([i for i in url_strings if i not in ext_group]) and ('HIT' not in k['key']):

Надеюсь, у вас есть то, что вы искали. Else опубликуйте свои вопросы в качестве комментариев.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню