python list () удаляет весь список при вложении с другой операцией в записной книжке ipython - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь получить список заголовков столбцов из фрейма данных panda. Я также хочу удалить один нежелательный элемент в списке. Я попробовал приведенный ниже код, и это работает.

features_list = list(data_panda.columns.values)
features_list.remove('email_address')
features_list

Вывод : создает список

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

features_list_1 = list(data_panda.columns.values).remove('email_address')
features_list_1

Вывод : Ничего

Скриншот : enter image description here

Почему?

Я использую среду Py2 в Anaconda.

1 Ответ

0 голосов
/ 06 июля 2018

.remove() изменяет исходный список на месте, ничего не возвращает. Вот почему features_list_1 было None, поскольку это значение по умолчанию, когда ничего не возвращается.


Если вы хотите сделать это в одну строку, вы не можете использовать .remove(), вместо этого создайте новый список со списком.

features_list = [x for x in data_panda.columns.values if x != 'email_address']

Но в отличие от remove это удалит все вхождения 'email_address', тогда как remove удалит только первое.


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

features_list = (lambda y=set(): [x for x in data_panda.columns.values if y or (x != 'email_address' or y.add(0))])()
...