Инициализация списка Python в цикле for - PullRequest
3 голосов
/ 26 января 2011

Как инициализировать список в цикле for:

for x, y in zip(list_x, list_y):
     x = f(x, y)

к сожалению, этот цикл не меняет list_x, даже если я этого хочу.

Есть ли способ иметь ссылкик элементам list_x в цикле?

Я понимаю, что могу использовать понимание списка, но это трудно прочитать, когда цикл for очень сложен .

Править: Мой цикл for состоит из 20 строк.Вы обычно помещали бы 20 строк в одно понимание списка?

Ответы [ 3 ]

8 голосов
/ 26 января 2011

Почему сложность списков может быть сложной?

list_x[:] = [f(tup) for tup in zip(list_x, list_y)]

Вместо 20-строчного цикла for, вы можете использовать набор выражений генератора или абстрагировать подмножество кода в функцию f.

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

3 голосов
/ 26 января 2011

Это также понимание многословного списка бедняков.

def new_list( list_x, list_y ):
    for x, y in zip(list_x, list_y):
        yield f(x, y)

list_x = list( new_list( list_x, list_y ) )
3 голосов
/ 26 января 2011

Будет ли это сделать?

# Create a temporary list to hold new x values
result = []

for x, y in zip(list_x, list_y):
     # Populate the new list
     result.append(f(x, y))

# Name your new list same as the old one
list_x = result
...