Давайте хороший взгляд на то, что вы думали, был прав:
for y in array:
if y!=0:
print(list(y))
Так мы проходим через каждое значение в массиве. Если значение не равно нулю, мы печатаем list(y)
. Проблема начинается здесь. Поскольку y
является целым числом, list(y)
возвращает ошибку, потому что вы не можете преобразовать целое число в список. Это будет работать, если вы сделали print(y)
.
Но тогда возникает еще одна проблема. Если мы выводим каждый элемент списка, который не является нулем, мы получаем что-то вроде этого, потому что код будет печатать только в порядке:
1
2
3
4
5
6
Вы заявляете в своем вопросе, что вы хотели список. Таким образом, этот код не будет работать, потому что не будет сохраненного списка. Таким образом, мы, наконец, прийти к право ответ:
array=[1,0,2,3,4,0,0,5,6,0]
list=[]
for y in array:
if y!=0:
list.append(y)
print(list)
Этот ответ сохраняет каждый y
значение, которое не равно нулю в списке, а затем, наконец, выводит список.
EDIT:
Это, как работает список понимание:
Прежде всего, я не могу не заметить, что вы сделали ошибку синтаксиса. : P Ты забыл о завершающих скобках! Вот правильный код: print(list(y for y in array if y != 0))
.
Прежде всего, мне нужно указать, что это НЕ СПИСОК КОМПОНЕНТОВ. Это генератор. Есть крошечная разница.
Понимание списка создает список на месте. Понимание списка выглядит следующим образом: [y for y in array if y != 0]
Генератор, который является тем, что вы использовали выше, является выражением. Это выглядит так: y for y in array if y != 0
.
Таким образом, вместо использования list(y for y in array if y != 0
, вы можете напрямую перейти на [y for y in array if y != 0]
.
Итак, теперь я объясню, как работает «понимание списка» (выражение генератора).Он начинается с циклического прохождения каждого значения array
. Он проверяет, не является ли значение не равным нулю. Если это не так, он добавляет y
в список вывода. Таким образом, выражение генератора совпадает с вторым рабочим кодом с циклом for, за исключением того, что python создает для вас выходной список, добавляя некоторое удобство.
Можете ли вы объяснить, почему вы считаете, что вторая версия такая же, как и первая? –
'filter (lambda el: el! = 0, array)' (но ew, просто используйте '[el для el в массиве, если el! = 0]' –
@RickTeachey Uh. В первой версии я увидел «для y в массиве ', так вот, как я начал вторую версию.Тогда вернусь к первой версии, я увидел' if y! = 0 ', поэтому я написал это во второй версии. И тогда оба они напечатали y! что в первой версии все преобразованное в список, а вторая версия, я пытаюсь преобразовать y в список. Но я до сих пор не понимаю, что происходит – Angular