Каков наилучший способ скопировать список списков строк в Python? - PullRequest
2 голосов
/ 11 августа 2011

Я новичок в Python, и чтобы скопировать матрицу в другую, я делаю:

import copy
matrix1.append(copy.deepcopy(matrix2))

Есть ли лучший, может быть, более короткий путь?

- обновление:

Типы представляют собой списки строк, например [["asdf", "fdsa"], ["zxcv", "vcxz"]], и я хочу добавить это в мой другой список, но я не хочу, чтобы они были одинаковыми ссылками (я хочу редактировать одну без изменения другой).

Ответы [ 3 ]

2 голосов
/ 11 августа 2011
  1. Вы уверены, что вам нужно что-либо копировать? В большинстве случаев лучше не копировать данные подобным образом.Это подразумевает, что вы собираетесь изменить копию.Очень часто можно просто создать что-то новое, а не видоизменить копию, что в итоге становится менее подверженным ошибкам по мере развития вашей программы.Что вы планировали сделать с копией, и уверены ли вы, что это лучше сделать при создании новой вещи, а не после?

  2. Если бы я должен был скопировать x = [["asdf", "fdsa"], ["zxcv", "vcxz"]], я бы написал copy = [list(ss) for ss in x] (или map(list, x)).Это довольно ясно показывает, что именно я делаю.

  3. Я избегаю copy модуля , когда мне нужно скопировать данные.Из-за того, как это работает, модуль копирования может дать сбой или дать неправильные ответы.Это в основном обещает быть полезным, когда вы не знаете структуру или содержание копируемого материала, но если вы этого не знаете, у вас обычно возникает более фундаментальная проблема, чем «как мне это скопировать?»,а именно: «как мне его использовать?»

1 голос
/ 11 августа 2011

Если ваша матрица на самом деле является списком, то это проще:

import copy
matrix1 = copy.deepcopy(matrix2)

Ваш код расширяет matrix1, который должен был бы существовать заранее, и почему вы сохраняете его оригинальное содержимое в дополнение к добавлению нового?

UPDATE:

Да, то, что у вас есть, - лучший способ.

0 голосов
/ 11 августа 2011

Другой способ:

original = [[1,2],[3,4]]
copy = [i[:] for i in original]

Имеет ли он более двух измерений? В противном случае оставайтесь с глубокой копией

, если вы хотите добавить:

matrix1.append([i[:] for i in original])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...