Ошибка при работе с многомерным кортежем. Python
Никак не мог разобраться, что я делаю не так. Есть кортеж следующего содержания
[('28467', '19740', '0'), ('28471', '19740', '0'), ('28472', '20560', '0'), ('28471', '19740', '0'), ('28468', '20560', '0'), ('15872', '20210', '0'), ('12350', '20300', '0'), ('28463', '20210', '1'), ('28467', '19740', '0'), ('28461', '19180', '1'), ('28462', '22300', '0'), ('28461', '19180', '1'),.....
Допустим мне нужно поменять первый элемент "28467"
bd_final_id0_price1_nal2_uid3=list(bd_final_id0_price1_nal2_uid3)
bd_final_id0_price1_nal2_uid3[1][0] = 777
Такая запись выдаёт ошибку:
TypeError: 'tuple' object does not support item assignment
Ответы (1 шт):
Кортеж - не изменяемый тип. Нужно либо сделать список списков, и тогда вы сможете поменять элемент, либо нужно делать новый список кортежей из старого, с подменой нужного элемента.
Почему не работает ваш способ - вы преобразуете в список только внешнюю коллекцию, которая у вас и так уже список. А то, что у неё (у коллекции, то есть списка) внутри, остаётся тем же чем и было, то есть кортежами. Нужно преобразовать в список все элементы, которые находятся внутри списка. Например, с помощью map:
bd_final_id0_price1_nal2_uid3 = list(map(list, bd_final_id0_price1_nal2_uid3))
Либо через списковое сокращение:
bd_final_id0_price1_nal2_uid3 = [list(x) for x in bd_final_id0_price1_nal2_uid3]