Как сделать независимые списки в списке? - PullRequest
4 голосов
/ 09 марта 2020
seats = 4  # user can choose an even input, I put 4 for this example
rows = 4  # user can choose an even or odd input, I put 4 for this example
seats_in_row_list = [i for i in string.ascii_uppercase[:seats]]
main_seat_list = [seats_in_row_list for i in range(rows)]

Вывод:

[['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D']]

Но когда я пытаюсь изменить 'A' на 'X' в первом списке, все списки меняются:

[['X', 'B', 'C', 'D'], ['X', 'B', 'C', 'D'], ['X', 'B', 'C', 'D'], ['X', 'B', 'C', 'D']] 

Что я ищу, так это вывод:

[['X', 'B', 'C', 'D'], ['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D']]

Ответы [ 2 ]

4 голосов
/ 09 марта 2020

Используйте метод копирования, чтобы получить копию отдельного списка перед назначением

main_seat_list = [seats_in_row_list.copy() for i in range(rows)]
2 голосов
/ 09 марта 2020

Если вы не используете seats_in_row_list для чего-либо, кроме конструкции main_seat_list, вам следует просто вставить определение. Вызов list здесь будет проще, чем использование списка.

seats = 4
rows = 4
main_seat_list = [list(string.ascii_uppercase[:seats]) for i in range(rows)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...