Замена элемента списка и возврат копии списка (в одну строку) с помощью Python - PullRequest
2 голосов
/ 21 декабря 2011

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

[new_value if x == replace_index else my_list[x] for x in range(len(my_list))]

Но есть ли более удобный способ сделать это, потенциально используя какую-то встроенную функцию, которую мне не хватает?

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Может быть что-то вроде этого:

[new_value if i == replace_index else element
 for i, element in enumerate(my_list)]

или:

new_list = my_list[:]
new_list[replace_index] = new_value

или:

new_list = my_list[:replace_index] + [new_value] + my_list[replace_index+1:]

В этом случае, я думаю, я предпочитаю второй вариант(вероятно, также самый быстрый).

0 голосов
/ 21 декабря 2011

Это не однострочный текст, но, вероятно, он более читабелен:

new_list = old_list[:]
new_list[replace_index] = new_value
...