2017-09-18 2 views
-2

튜플 목록에서 목록을 생성하는 동안 "목록 인덱스가 튜플이 아닌 정수 또는 조각이어야합니다."오류가 발생합니다. 튜플 리스트는 다음과 같은 구조가 :TypeError : 목록 인덱스는 튜플 목록에 튜플이 아닌 정수 또는 조각이어야합니다.

[(29208, 8, 8, 8), (29209, 8, 8, 8), (29210, 8, 8, 8), (29211, 8, 8, 8)] 

튜플의 첫 번째 요소는 타임 시리즈를, 다른 요소는 어떤 상태 변수이다.

간단한리스트 튜플리스트로 변환하는 루프

다음된다 : 상술 한 바와 같이

TimeAxis = [] 

for n in lst: 
    TimeAxis.append(lst[n][0]) 

어디 LST 포맷을 갖는다.

Traceback (most recent call last): 
    File "X:\Temp\XXX_python_graph\RTT_Plot.py", line 30, in <module> 
    Time.append(lst[n][0]) 
TypeError: list indices must be integers or slices, not tuple 

나는 이것이 초보자 질문은 이해하지만, 유래에 다른 솔루션이 작동하지 않습니다 는 몇 가지 이유 때문에 오류가 발생합니다. 미리 감사드립니다.

+0

'TimeAxis.append (lst [0])'또는'TimeAxis = [lst의 항목에 대한 항목 [0] ' –

+0

당신은 전체 튜플을 인덱스로 사용합니다 ... 그 이유는 무엇입니까? –

+0

[파이썬에서 각 하위 목록의 첫 번째 항목을 추출] 가능한 복제본 (https://stackoverflow.com/questions/25050311/extract-first-item-of-each-sublist-in-python) –

답변

3

파이썬의 for 루프는 Foreach construct입니다. 색인이 아닌 목록의 요소 을 반복합니다.

따라서 nlst의 튜플 중 하나이며 색인이 아닙니다. 직접 사용

for n in lst: 
    TimeAxis.append(n[0]) 

당신은 list comprehension 사용하여 코드를 단순화 수 :

TimeAxis = [tup[0] for tup in lst] 
0
for n in lst: 
    TimeAxis.append(n[0]) 

당신이 목록에 반복, n의 그것 가져 오는 하나 개의 요소 하나, 그래서 값이 당신의 모든 튜플, 그냥 액세스 0th 그것의 인덱스 및 추가

0

당신이 이해할 수 있도록, 코드에서 무엇이 잘못되었는지 :

lst = [(29208, 8, 8, 8), (29209, 8, 8, 8), (29210, 8, 8, 8), (29211, 8, 8, 8)] 
for n in lst: # ns in lst -> (29208, 8, 8, 8), ... , (29211, 8, 8, 8) 
    TimeAxis.append(lst[n][0]) # 1st iter: lst[(29208, 8, 8, 8)][0] 

따라서 TypeError. 당신이 아마하고 싶었던 것은이 작동합니다

for i in range(len(lst)): # is in range(len(lst)) -> 0,1,2,3 
    TimeAxis.append(lst[n][0]) # 1st iter: lst[0][0] 

있지만, 그럴 필요가 없다. @Martijn Pieters answer에서 찾을 수있는 더 pythonic 방법이 있습니다.

관련 문제