элемент списка изменений понимания списка - PullRequest
0 голосов
/ 20 июня 2020

Я хочу изменить элемент списка, используя понимание списка.

z=[1,2,3]
z=[z[i]=1 for i in range(len(z))]

Я хочу получить

z=[1,1,1]

, но это не работает.

Ответы [ 4 ]

1 голос
/ 20 июня 2020

, если вы хотите изменить все переменные списка на одно и то же число, используя понимание списка - вы в основном создаете новый список ... поэтому, если это ваше намерение, оно должно быть таким:

z = [1,2,3]
z = [1 for x in z]

Вывод:

[1,1,1]
0 голосов
/ 20 июня 2020

Если вы хотите изменить z на месте, используйте for l oop:

for i,_ in enumerate(z):
    z[i] = 1

Если вы хотите заменить сам список (а не просто изменить существующий список), используйте понимание списка:

z = [1 for _ in z]

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

z = [z[i]=1 for i in range(len(z))]

, потому что x в [x for i in y] должно быть выражением и z[i] = 1 не является выражением; это оператор присваивания.

0 голосов
/ 20 июня 2020

Я хочу изменить элемент списка, используя понимание списка.

z[:] = [1 for _ in z]

или:

[z.__setitem__(i, 1) for i in range(len(z))]

Они изменят существующий список, а не создадут новый один. Вы можете увидеть это, если сделаете print(id(z)) до и после. Все, что начинается с z = , будет указывать на z на новый список.

0 голосов
/ 20 июня 2020

Используйте это понимание: z = [z[0] for _ in z]

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

...