2016-09-08 13 views
1

のUnicodeない、整数でなければなりません私は、リストtime = time.split()に文字列を変換するには()関数分割を使用し、これが私の出力がどのように見えるかです:その後、私はアクセスしようとしたTypeError例外:リストインデックスはPythonコード

[u'1472120400.107'] 
[u'1472120399.999'] 
[u'1472120399.334'] 
[u'1472120397.633'] 
[u'1472120397.261'] 
[u'1472120394.328'] 
[u'1472120393.762'] 
[u'1472120393.737'] 

インデックスが範囲外のエラーをもたらすprint time[1]を使用するリストの内容(1つの値だけが1つのリストに格納されるため)他の人が投稿した質問をチェックし、print len(time)を使用しました。

1 
[u'1472120400.107'] 
1 
[u'1472120399.999'] 
1 
[u'1472120399.334'] 
1 
[u'1472120397.633'] 
1 
[u'1472120397.261'] 
1 
[u'1472120394.328'] 
1 
[u'1472120393.762'] 
1 
[u'1472120393.737'] 

ログを動的に取得し、ちょうど時間を抽出する必要があるため、このループ全体をこのforループ内で実行します。 これは私のコードの一部です:

line_collect = lines.collect() #spark function 
for line in line_collect : 
    a = re.search(rx1,line) 
    time = a.group() 
    time = time.split() 
    #print time[1] #index out of range error which is why I wrote another for below 
    for k in time : 
     time1 = time[k]#trying to put those individual list values into one variable but get type error 
     print len(time1) 

私は次のエラーを取得する:

time1 = time[k]
TypeError: list indices must be integers, not unicode

誰かが、私は、各アクセスできるようにただ1つのリストにそれらの単一のリストの各値を読み取る方法を教えてもらえますそのうちの1つのインデックス[値]を使用します。私はPythonの初心者です。

私の必要な出力:

time =['1472120400.107','1472120399.999','1472120399.334','1472120397.633','1472120397.261','1472120394.328','1472120393.762','1472120393.737']

を私は[1]結果として1472120399.999を与えるために時間を使うことができるように。

+0

必要な出力は? –

+0

質問に出力を追加しました。 – kaks

答えて

0

forループを使用してリストをループすると、インデックス自体ではなく、一度に1つの値が得られます。また、Pythonはそのリストあなたのうちの最初の要素を取得するには、ゼロベースの言語です

-

for k in time: 
    time1 = k 
    print(time1) 

for k, value in enumerate(time): 
    time1 = value # Or time1 = time[k] 
    print(time1) 

それとも、値そのものを取得:列挙を使用することを検討してくださいおそらくtime[0]を使用します。

+0

私は私の古いものと同じ出力を得ます。私は私の質問に必要な出力を追加しました。 – kaks

1

更新:私はあなたが望むものを誤解しました。あなたは正しい出力を既に持っており、それは文字列です。文字列の前にuがあるのは、それが16ビットのユニコード文字列であるからです。 uは、通常の文字列と区別するためのPythonフラグです。それを画面に印刷すると、正しい文字列が得られます。他の文字列と同様に使用してください。

time = [u'1472120400.107'] # One element just to show 

for k in time: 
    print(k) 
+0

私の 'newlst'を印刷すると、まだ空です。 – kaks

+0

それから、私はループのメインで試しました: 'newlst = [] \t newlst。append(time) \t print newlst [] 'しかし値はまだ異なったリストにあります。 – kaks

+0

私の元のコードは、すべての値を1つのリストに入れるわけではありません。単一の値が抽出されるたびに、その値の新しいリストが作成されます。だから私はリスト[1]のインデックスを取得していますが、リスト[0]の結果を取得しています。私が間違っていなければ、8つの異なるリストを作成しています。 – kaks

0

ありがとうございました。私は最終的にコードの権利を得ました:

newlst = [] 
for line in line_collect : 
    a = re.search(rx1,line) 
    time = a.group() 
    newlst.append(float(time)) 
print newlst 

これはリスト全体の値を1つのリストに入れます。 出力:

[1472120400.107, 1472120399.999, 1472120399.334, 1472120397.633, 1472120397.261, 1472120394.328, 1472120393.762, 1472120393.737]

+0

内部ループがあったので元のコードがうまくいったと思います。内部のループで浮動小数点に変換することができました。オリジナルの質問は、希望の出力が文字列であることを示しています。 – Kafo