2014-06-04 4 views
0

다른 사람이 이해하기 어려운 코드 줄을 제공 받았습니다.코드 줄 이해

inputString = "[1,2,3,4,5,6,7,8,9,10,11,12]" 

a = inputString[1:-1].split(',') 
z = zip(a[::2],a[1::2]) # this line 
print a 
print z 

나는이 기능과 그 작동 방법을 이해합니다. 심지어 zip 기능을 이해합니다. 내가 이해하지 못하는 것은 a[::2],a(1::2)이 무엇을하는지입니다. 이 코드를 수정하고 다양한 결과를 얻으려고 시도했지만 코드를 수정하는 내용을 이해할 수는 없습니다. 필자는 Python에서 상당히 새롭고 약간의 도움을받을 수 있습니다.

코드에서

일반, 수정되지 않은 결과는 다음과 같습니다

: I '는'두 그룹 대신 4 그룹으로 분할의 결과, 즉를 얻기 위해 노력하고

['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] 
[('1', '2'), ('3', '4'), ('5', '6'), ('7', '8'), ('9', '10'), ('11', '12')] 

('1','2','3','4'),('5','6','7','8')....etc. 
+0

의 보폭을 사용할 필요가 : http://stackoverflow.com/questions/509211/ 비톤 슬라이스 표기 –

+0

[itertools' recipe'grouper'] (https://docs.python.org/2/library/itertools.html#recipes) ... – jonrsharpe

답변

2
z = zip(a[::2],a[1::2]) 

상기 라인은 두리스트 a 단계별로 Explain Python's slice notation를 이용한다. a[::2]a에있는 모든 다른 항목을 얻기 위해 파이썬에게 말하고 있습니다.

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> lst[::2] # Every other item (every item counting by 2's) 
[1, 3, 5, 7, 9] 
>>> 

a[1::2]

파이썬 인덱스 1에서 시작 a에서 다른 모든 항목을 얻을 말하고있다 : 아래 데모입니다. 아래 데모는 다음과 같습니다

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> lst[1::2] # Remember that Python indexes start at 0 
[2, 4, 6, 8, 10] 
>>> 

zip 다음 페어링 업되어 a[::2]a[1::2]에 의해 반환 된 목록에있는 항목 :

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> zip(lst[::2], lst[1::2]) 
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)] 
>>> 

당신의 예에서 네 개의 항목 튜플을 얻으려면, 다음을 사용할 수 있습니다.

>>> inputString = "[1,2,3,4,5,6,7,8,9,10,11,12]" 
>>> a = inputString[1:-1].split(',') 
>>> zip(*[iter(a)]*4) 
[('1', '2', '3', '4'), ('5', '6', '7', '8'), ('9', '10', '11', '12')] 
>>> 

읽기 : 당신이 다음 4 튜플을 원하는 경우에 How does zip(*[iter(s)]*n) work in Python?

+0

을 확인하십시오. 나는 올바르게 이해한다. 숫자 목록 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]에서 숫자 '1'은 인덱스 위치 '0'으로 간주됩니까? – SnapperTrx

+0

@SnapperTrx - 예. 파이썬 인덱스는 C/C++ 인덱스와 같습니다. 인덱스는 '0'부터 시작합니다. – iCodez

+0

zip 대신 list comprehension을 사용하고 다음과 같이 열거 할 수 있습니다. print [(x, y) for x, y in enumerate (s) if x % 2! = 0] –

0

을 당신은 4 개 인수하고 여기에 설명을 참조하시기 바랍니다 4.

z = zip(a[::4], a[1::4], a[2::4], a[3::4])