튜플로 목록을 어떻게 인덱싱합니까?
문제
나는 Python을 배우고 있으며이 예를 발견했습니다.
W = ((0,1,2),(3,4,5),(0,4,8),(2,4,6))
b = ['a','b','c','d','e','f','g','h','i']
for row in W:
print b[row[0]], b[row[1]], b[row[2]]
어떤 인쇄 :
알파벳
데프
아 에이
CEG
나는 이유를 알아 내려고 노력하고있다!
예를 들어 확장 된 버전을 통해 처음으로 다음과 같이받습니다.
print b[(0,1,2)[0]], b[(0,1,2)[1]], b[(0,1,2)[2]]
그러나 나는 (0,1,2)가 어떻게 상호 작용하는지 이해하지 못한다. 누구든지 설명을 제공 할 수 있습니까? 감사.
(이것은 Tic Tac Toe 게임을위한 일부 코드의 약식 버전이며 잘 작동합니다.이 부분을 얻지 못합니다).
해결책
튜플의 튜플 위에 반복됩니다 row
인쇄 할 때 3 가지 요소 튜플입니다. b
인덱스별로 목록입니다 row
튜플이 포함되어 있습니다.
아마도이 작업을 수행하는 약간 덜 어수선한 방법은 다음과 같습니다.
for f, s, t in W:
print b[f], b[s], b[t]
다른 팁
촬영에서 (0,1,2)
아무것도하지 않습니다. 그것의 튜플이고 목록처럼 색인화 될 수 있습니다. b[(0,1,2)[0]]
becomes b[0]
~부터 (0,1,2)[0] == 0
.
첫 번째 단계에서는 Python이 수행됩니다 b[row[0]]
→ b[(0,1,2)[0]]
→ b[0]
→ 'a'
BTW, 한 번에 시퀀스에서 여러 항목을 얻으려면 연산자를 사용할 수 있습니다.
from operator import itemgetter
for row in W:
print itemgetter(*row)(b)
튜플을 색인화하면 배열을 색인화 할 때와 마찬가지로 N 번째 요소를 추출합니다. 즉, 확장 된 버전입니다
print b[(0,1,2)[0]], b[(0,1,2)[1]], b[(0,1,2)[2]]
와 동등하다
print b[0], b[1], b[2]
즉, (0, 1, 2) 튜플의 0 번째 요소 ((0, 1, 2)[0]
)는 0입니다.
각 단계에서 모든 변수의 값을 기록하십시오. 결과가 옳습니다.
상호 작용 1 :
- 행은 (0,1,2)입니다.
- B [행 [0]], B [행 [1]], B [행 [2] B [(0,1,2) [0], (0,1,2) [1], (0,1,2) [2], == B [0], B [1], B입니다. [2
상호 작용 2 :
- 열 IS (3,4,5)
- B [행 [0]], B [행 [1]], B [행 [2] IS B [3], B [4], B [5
파이썬 대화 형 쉘은 무슨 일이 일어나고 있는지 알 수 있도록 도와줍니다.
In [78]: W = ((0,1,2),(3,4,5),(0,4,8),(2,4,6))
In [79]: b = ['a','b','c','d','e','f','g','h','i']
In [81]: row=W[0] # The first time throught the for-loop, row equals W[0]
In [82]: row
Out[82]: (0, 1, 2)
In [83]: row[0]
Out[83]: 0
In [84]: b[row[0]]
Out[84]: 'a'
In [85]: b[row[1]]
Out[85]: 'b'
In [86]: b[row[2]]
Out[86]: 'c'
for row in W:
첫 번째 튜플에 배치되었습니다 row
~이다 (0,1,2)
다시 말해서, W[0] == (0,1,2)
Therefore, since `row` == (0,1,2), then row[0] == 0
그래서 [0]th element of b == 'a'
b[0] == 'a'
등등...
b[1] == 'b'
b[2] == 'c'