파이썬에서 목록 꺼내기
introduction
경기 프로그래밍의 문제를 풀었을 때 사용한 방법에 대해 써 갑니다.
리스트의 임의의 부분을 꺼내는 처리에 대해 기술합니다.
잘못되어있는 곳이 있으면 코멘트 등 잘 부탁드립니다.
리스트의 대입 조작에 대해 이해가 달랐기 때문에, 수정했습니다. 리스트가 변수인 경우는 변수에 리스트 오브젝트의 주소치가 대입되고 있으므로, 대입을 실시할 때에는 리스트 오브젝트의 주소치를 건네주고 있다고 이해가 되지 않았습니다. 그 점을 주로 수정했습니다. 무례했습니다. (2020/05/26)
목록 준비
아래에서 임의의 2차원 리스트를 numpy를 사용하여 작성했습니다.
import numpy as np
array=np.arange(16).reshape((4,4)) #データを準備
>>>array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
리스트의 임의 부분을 꺼내는 처리
예를 들어 아래에 표시된 것과 같은 빨간색 원으로 둘러싸인 목록을 검색하려는 경우
파이썬으로 구현하면 다음과 같이 할 수 있다고 생각했습니다.
div_array=[]
for i in range(1,3):
tep_array=[]
for j in range(1,3):
tep_array.append(array[i][j])
div_array.append(tep_array)
print(div_array)
#div_array=[[5, 6], [9, 10]]
다만, 이 방법이라면 기술량도 많아, 변수를 많이 둘 필요가 있어 읽기 어렵습니다.
덧붙여 : array와 div_array가 나타내는 리스트 오브젝트는 다르고, 각 리스트내의 리스트의 주소치도 다르기 때문에, 어느 쪽의 리스트내를 변경했을 때에도 독립적으로 변경할 수 있습니다.
이 읽기 어려움을 해결하기 위해서, ndarray형 배열이면, 슬라이스를 이용하는 것으로 구현할 수 있습니다.
(단, python list에서 list [1 : 3, 1 : 3]을 지정하면 오류가 발생합니다.)
div_array=array[1:3,1:3]
>>>div_array([[ 5, 6],
[ 9, 10]])
우선, 왼쪽의 1:3으로 행 방향을 취해,
[ 4, 5, 6, 7] 및 [ 8, 9, 10, 11] 행을 검색합니다.
그런 다음 오른쪽 1:3에서 열 방향을 검색할 수 있습니다.
따라서 [5,6]과 [9,10]을 꺼낼 수 있습니다.
다만, 이 경우 div_array내의 리스트의 주소와 array내의 리스트의 주소는 동일하므로, div_array내를 조작하면 array내의 리스트의 값도 변경해 버립니다. 그래서 div_array 안에 array 내의 리스트와 다른 새로운 리스트를 작성해, 그 오브젝트에 원래의 리스트의 값을 카피할 필요가 있습니다. 그 구현은
div_array=array[1:3,1:3].copy()
라고 기술하는 것으로 해결할 수 있습니다.
덧붙여 : list내 list를 print() 할 때의 콩 지식
이야기가 조금 벗어날 수 있지만 목록의 요소를 순서대로 출력 할 때
다음과 같이 하는 경우가 많다고 생각합니다.
for i in div_array:
print(i)
#[5 6]
#[ 9 10]
다만 list의 [ ]가 표시되고 있으면 부정해가 되는 일도 있어, 이것을 막기 위해서 이하와 같이 구현을 시도했습니다.
인수의 end=""에 스페이스를 지정해, 5와 6 을 스페이스로 분할해 그 후의 하늘의 print()로 다음의 행에 옮겨 하려고 했습니다.
for i in div_array:
for j in i:
print(j ,end=" ")
print()
>>>5 6 #6、10の後にスペースが入っている
>>>9 10 #6、10の後にスペースが入っている
하지만, 이 구현에서는 6과 10의 후에도 스페이스가 들어 버려 부정해가 되었습니다.
이 문제를 해결하기 위해 다음과 같이 쉽게 해결할 수있었습니다.
[ ]를 제외하고 싶은 리스트의 앞에 *를 붙여 출력하는 것으로, 리스트내 리스트의 각 요소를 분할해 표시할 수 있었습니다.
for i in div_array:
print(*i)
>>>5 6
>>>9 10
요약
이번에는 2차원 리스트로부터 임의의 리스트를 꺼내는 방법과 2차원 리스트의 출력에 관해서 말했습니다.
꽤 매니악한 내용입니다만 사용해 보세요.
Reference
이 문제에 관하여(파이썬에서 목록 꺼내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ryosci/items/f06d56c2e2b79fce4372
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
아래에서 임의의 2차원 리스트를 numpy를 사용하여 작성했습니다.
import numpy as np
array=np.arange(16).reshape((4,4)) #データを準備
>>>array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
리스트의 임의 부분을 꺼내는 처리
예를 들어 아래에 표시된 것과 같은 빨간색 원으로 둘러싸인 목록을 검색하려는 경우
파이썬으로 구현하면 다음과 같이 할 수 있다고 생각했습니다.
div_array=[]
for i in range(1,3):
tep_array=[]
for j in range(1,3):
tep_array.append(array[i][j])
div_array.append(tep_array)
print(div_array)
#div_array=[[5, 6], [9, 10]]
다만, 이 방법이라면 기술량도 많아, 변수를 많이 둘 필요가 있어 읽기 어렵습니다.
덧붙여 : array와 div_array가 나타내는 리스트 오브젝트는 다르고, 각 리스트내의 리스트의 주소치도 다르기 때문에, 어느 쪽의 리스트내를 변경했을 때에도 독립적으로 변경할 수 있습니다.
이 읽기 어려움을 해결하기 위해서, ndarray형 배열이면, 슬라이스를 이용하는 것으로 구현할 수 있습니다.
(단, python list에서 list [1 : 3, 1 : 3]을 지정하면 오류가 발생합니다.)
div_array=array[1:3,1:3]
>>>div_array([[ 5, 6],
[ 9, 10]])
우선, 왼쪽의 1:3으로 행 방향을 취해,
[ 4, 5, 6, 7] 및 [ 8, 9, 10, 11] 행을 검색합니다.
그런 다음 오른쪽 1:3에서 열 방향을 검색할 수 있습니다.
따라서 [5,6]과 [9,10]을 꺼낼 수 있습니다.
다만, 이 경우 div_array내의 리스트의 주소와 array내의 리스트의 주소는 동일하므로, div_array내를 조작하면 array내의 리스트의 값도 변경해 버립니다. 그래서 div_array 안에 array 내의 리스트와 다른 새로운 리스트를 작성해, 그 오브젝트에 원래의 리스트의 값을 카피할 필요가 있습니다. 그 구현은
div_array=array[1:3,1:3].copy()
라고 기술하는 것으로 해결할 수 있습니다.
덧붙여 : list내 list를 print() 할 때의 콩 지식
이야기가 조금 벗어날 수 있지만 목록의 요소를 순서대로 출력 할 때
다음과 같이 하는 경우가 많다고 생각합니다.
for i in div_array:
print(i)
#[5 6]
#[ 9 10]
다만 list의 [ ]가 표시되고 있으면 부정해가 되는 일도 있어, 이것을 막기 위해서 이하와 같이 구현을 시도했습니다.
인수의 end=""에 스페이스를 지정해, 5와 6 을 스페이스로 분할해 그 후의 하늘의 print()로 다음의 행에 옮겨 하려고 했습니다.
for i in div_array:
for j in i:
print(j ,end=" ")
print()
>>>5 6 #6、10の後にスペースが入っている
>>>9 10 #6、10の後にスペースが入っている
하지만, 이 구현에서는 6과 10의 후에도 스페이스가 들어 버려 부정해가 되었습니다.
이 문제를 해결하기 위해 다음과 같이 쉽게 해결할 수있었습니다.
[ ]를 제외하고 싶은 리스트의 앞에 *를 붙여 출력하는 것으로, 리스트내 리스트의 각 요소를 분할해 표시할 수 있었습니다.
for i in div_array:
print(*i)
>>>5 6
>>>9 10
요약
이번에는 2차원 리스트로부터 임의의 리스트를 꺼내는 방법과 2차원 리스트의 출력에 관해서 말했습니다.
꽤 매니악한 내용입니다만 사용해 보세요.
Reference
이 문제에 관하여(파이썬에서 목록 꺼내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ryosci/items/f06d56c2e2b79fce4372
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
for i in div_array:
print(i)
#[5 6]
#[ 9 10]
for i in div_array:
for j in i:
print(j ,end=" ")
print()
>>>5 6 #6、10の後にスペースが入っている
>>>9 10 #6、10の後にスペースが入っている
for i in div_array:
print(*i)
>>>5 6
>>>9 10
이번에는 2차원 리스트로부터 임의의 리스트를 꺼내는 방법과 2차원 리스트의 출력에 관해서 말했습니다.
꽤 매니악한 내용입니다만 사용해 보세요.
Reference
이 문제에 관하여(파이썬에서 목록 꺼내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ryosci/items/f06d56c2e2b79fce4372텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)