2017-09-18 26 views
-2

タプルのリストからリストを生成しようとすると、リストインデックスはタプルではなく整数またはスライスでなければなりません。タプルの リストは、以下の構造を有する:TypeError:リストインデックスはタプルのリストのタプルではなく、整数またはスライスでなければなりません

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

タプルの最初の要素は、時系列であるが、他の要素は、いくつかの変数の状態です。

単純なリストにタプルのリストから変換するためのループは以下の通りである:上記のようにLSTフォーマットを有する

TimeAxis = [] 

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

を。

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 

私はこれは初心者の質問であることを理解、しかしstackoverflowの上の他のソリューションが動作しません: は、何らかの理由でそれがエラーをスローします。 ありがとうございます。

+0

'TimeAxis.append(lst [0])'または 'TimeAxis = [lstのアイテムのアイテム[0] ' –

+0

あなたはタプル全体をインデックスとして使用しています。 –

+0

[Pythonで各サブリストの最初の項目を抽出する]の可能な複製(https://stackoverflow.com/questions/25050311/extract-first-item-of-each-sublist-in-python) –

答えて

3

Pythonのforループは、Foreach constructです。インデックスではなく、リストの要素を反復処理します。

したがってnは、lstのタプルの1つで、インデックスではありません。それを直接使用します。

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にあります。

関連する問題