2011-08-11 9 views
2

내가 파이썬에 새로 온 사람, 그리고 다른 매트릭스를 복사, 내가하고 있어요 :파이썬에서 문자열 목록을 복사하는 가장 좋은 방법은 무엇입니까?

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

거기 더 나은, 어쩌면 짧은 방법은?

--update :

내가 원하는 (유형 문자열의 목록, [["asdf", "fdsa"], ["zxcv", "vcxz"]]처럼, 나는 내 다른 목록에이를 추가 할,하지만 난 그들에게 동일한 참조를 싶지 않아 다른 하나는 변경하지 않고 편집). 당신의 행렬은 목록이 실제로 경우

+5

이러한 유형이 무엇인지 우리에게 설명해야합니다. –

+0

나는 당신이 무엇을하려고하는지 정말로 이해하지 못합니다. 첫 번째 행렬에 두 번째 행렬의 내용을 추가 하시겠습니까? – Bogdan

+0

@Ned Batchelder : 질문을 업데이트했습니다.보세요. –

답변

1

는,이는 간단 : 코드는 사전에 존재해야 matrix1을 확장하고, 왜 당신은 추가 할뿐만 아니라 원래의 내용을 보존하는

import copy 
matrix1 = copy.deepcopy(matrix2) 

새로운 것들?

업데이트 :

네, 가지고있는 것이 가장 좋습니다.

+0

답장을 보내 주셔서 감사합니다. 더 설명하지 못해 죄송합니다. 추가하고 싶다는 의미입니다. 기존 행렬에 대한 것입니다. –

+0

@ 톰, 전 완전히 당신을 따르지 않습니다. 당신은'x = [[ 'a', 'b'], [ 'c', 'd'], [ 'e', ​​f ']''와'y = [[ 'w' x '], ['y ','z ']]'''[['a ','b '], ['c ','d '], ['e ' , 'y', 'z'] ''그리고'y [0] [0] ='q ''를 나중에하고 싶지 않다면 'x'에 들어있는 내용을 변경 하시겠습니까? –

+0

@Mike Graham : 예, 완벽합니다. –

0

또 다른 방법 :

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

가 2 개 이상의 차원이 있습니까? 당신은 당신이 무엇이든을 복사 할 필요가 있는지

matrix1.append([i[:] for i in original]) 
2
  1. 위치 : 당신이 추가하려는 경우 그렇지 않으면 deepcopy

    함께있어? 시간의 대부분은 이렇게 데이터를 복사하지 않는 것이 가장 좋습니다. 그렇게하면 복사본을 변경하려고합니다. 아주 자주 복사본을 변경하는 것보다는 새로운 것을 만드는 것이 가능합니다. 프로그램을 개발할 때 오류가 덜 발생하게됩니다. 복사본을 가지고 무엇을 할 계획 이었습니까? 그리고 새로운 것보다는 후에 만드는 것이 더 낫지는 않습니까? 내가x = [["asdf", "fdsa"], ["zxcv", "vcxz"]]을 복사한다면

  2. , 나는 copy = [list(ss) for ss in x] (또는 map(list, x))를 작성합니다. 이것은 제가하고있는 일을 분명히합니다.

  3. 나는 데이터를 복사해야 할 때 copy 모듈을 피합니다. 작동 방식으로 인해 복사 모듈이 실패하거나 잘못된 대답을 줄 수 있습니다. 대부분 당신이 복사하고있는 내용의 구조 나 내용을 모를 때 유용 할 것이지만, 그 사실을 모른다면 "어떻게 복사합니까?"보다 근본적인 문제가 있습니다. 즉 "어떻게 사용합니까?"

+0

'''matrix2의'ss에 대한 list (ss)와 비슷하다.''copy.deepcopy (matrix2)'와 똑같이 작동한다. 'list (ss)'또는'ss'를 사용하는 것의 차이점을 이해하고 있습니까,'ss'는 이미 목록입니까? –

+0

@Tom,'list'는 이전 목록과 동일한 항목을 포함하는 새 목록을 만듭니다. 모든 의도와 목적을 위해 list는'def list (iterable) : return [iterable의 item for item]'처럼 정의된다. –

+1

복사 모듈이 실패하거나 잘못된 대답을 제공 할 수있는 예를 들어 줄 수 있습니까? –

관련 문제