Построить для цикла в одной строке и получил неправильный вывод, который не является типом

1

Я пытаюсь написать код в списках. Тем не менее, я получил nonetype, когда я это делаю.

Код:

a = ["I", "have", "something", "to", "buy"]
delete = ["I", "have"]

aa = [a.remove(x) for x in delete]
print(aa)

выход:

[None, None]

Ожидаемый результат:

["something", "to", "buy"]
  • 0
    Вы должны будете напечатать «а» ... не «аа» ...
  • 0
    Понимаю. Спасибо, сэр. Но что я должен назначить для переменной? Должен ли я оставить это аа? Это будет пустая трата памяти? Есть ли умный способ использовать списки без присвоения какой-либо переменной?
Показать ещё 2 комментария
Теги:
list-comprehension

5 ответов

1

Попробуйте выполнить печать (a) вместо печати (aa)

Когда вы делаете a.remove(x), он удаляет его из массива'a '.

  a = ["I", "have", "something", "to", "buy"]
  delete = ["I", "have"]

  aa = [a.remove(x) for x in delete]
  print(a)
1

Вы не понимаете использование списка "удалить" и/или понимания.

aList.remove(item) 

изменить переменную "aList" и не возвращать ничего (почему вы получаете только элементы "Нет"). То, что вы делаете, выполняет итерацию через каждый элемент удаления и вызывает удаление. Фактически, ваш список должен быть результатом, который вы хотите после создания списка aa:

a = ["I", "have", "something", "to", "buy"]
delete = ["I", "have"]

aa = [a.remove(x) for x in delete]

a  ["something", "to", "buy"]

aa  [None,None]

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

aa=[word for word in a if not word in delete]
aa  ["something", "to", "buy"]
1

Вы можете сделать что-то подобное этому концептуально с filterfalse

from itertools import filterfalse

aa = list(filterfalse(lambda x: x in delete, a))
print(aa)
# ['something', 'to', 'buy']
1

list.remove изменяет список InPlace и возвращает None. Например:

a = ["I", "have", "something", "to", "buy"]
print(a.remove("I")) # ['have', 'something', 'to', 'buy']
print(a) # None

Если вы действительно хотите сделать это в одной строке, вы можете сохранить свой код. Пока вам не нужен aa, просто напечатайте a.

  • 0
    Спасибо, сэр. Но что я должен назначить для переменной? Должен ли я оставить это аа? Это будет пустая трата памяти? Есть ли умный способ использовать списки без присвоения какой-либо переменной?
  • 0
    Я понял. благодарю вас
1

Вы должны использовать понимание, если:

Код:

aa = [x for x in a if x not in delete]

Тестовый код:

a = ["I", "have", "something", "to", "buy"]
delete = ["I", "have"]

aa = [x for x in a if x not in delete]
print(aa)

Результаты:

['something', 'to', 'buy']

Ещё вопросы

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