2012-04-30 4 views
1

私はリストを持っていて、リストを含んでいます。内側のリストは空であってもよい。これは構造体である:"for-in loop"の学習指数

[[],[a,b],[],[c],[d]] 

マイコード:

for inner in list: 
    for char in inner: 
     print char   # I want to add indexes of inner lists here 

出力です:

abcd 

私は出力になりたい:

2a2b4c5d 

番号がインデックスされています内部リストのこれを行う簡単な方法はありますか?

+1

本当に変数でない限り、内側のリスト項目を引用符で囲む必要があります。またリストは名前のための貧しい選択です。 – Spaceghost

+0

はい、引用符があります。私はここで書くのを忘れてしまった。 – Rckt

答えて

8

listのタイプは、の組み込み型であるため、変数名として使用しないでください。あなたはenumerate()カウントがゼロベースのことがわかり

>>> lst = [[],['a','b'],[],['c'],['d']] 
>>> for idx, inner in enumerate(lst): 
     for char in inner: 
     print idx, char 


1 a 
1 b 
3 c 
4 d 

>>> for idx, inner in enumerate(lst, 1): 
    for char in inner: 
     print idx, char 


2 a 
2 b 
4 c 
5 d 

をだけ行うことneccessary、Pythonのカウント規則で0ベースの場合:あなたは1ベースの予想出力と一致するように、しかし開始と二番目の引数を指定することができます。

+0

名前リストを私に思い出させていただきありがとうございます。 – Rckt

1
for i, inner in enumerate(myList): # just add an index variable here 
    for char in inner: 
     print i   # and use it wherever you need to 
     print char 
+2

これは、 "ValueError:解凍するために複数の値が必要"となります。 ch3kaの回答 – Spaceghost

+0

のように列挙型を使用する必要があります。エラーを修正しました。ありがとう@Spaceghost! – dragon

1

これは動作するはずです:

for i in range(len(list)): 
    for char in list[i]: 
     print i+1 
     print char 

(3つの新しい答えが現れ、このo.Oを入力中)

2

はまさにその出力を取得するには、一つの方法はsys.stdoutに直接書き込むことであろう。印刷コマンド(2.x)は、最終的に各インデックス+ charの間にスペースを残してしまいます。

import sys 
for ndx, inner in enumerate([[],['a','b'],[],['c'],['d']], 1): 
    for char in inner: 
     sys.stdout.write('%d%s' % (ndx, char))