Построить для цикла в одной строке и получил неправильный вывод, который не является типом - PullRequest
0 голосов
/ 11 октября 2018

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

Код:

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

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

вывод:

[None, None]

Ожидаемый вывод:

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

Ответы [ 5 ]

0 голосов
/ 11 октября 2018

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

from itertools import filterfalse

aa = list(filterfalse(lambda x: x in delete, a))
print(aa)
# ['something', 'to', 'buy']
0 голосов
/ 11 октября 2018

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

aList.remove(item) 

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

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"]
0 голосов
/ 11 октября 2018

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

Код:

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']
0 голосов
/ 11 октября 2018

Попробуйте print (a) вместо print (aa)

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

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

  aa = [a.remove(x) for x in delete]
  print(a)
0 голосов
/ 11 октября 2018

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

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

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

...