2011-05-15 9 views
2

prorgamming初心者 - 私はやっていた練習への答えを探していた、hereから私の答えを得た。私の質問はこれです - そのスレッドから、最良の答えとして選ばれた1、[私が最初に私のために浮かんだ]

[float(i) for i in lst] 

このコードされたコードは、それが行うことになっていたものでしたが、私はその新しいリストを取得しようとしたとき、私はエラーが発生する

>>> xs = '12 10 32 3 66 17 42 99 20'.split() 
>>> [float(i) for i in xs] 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> i 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'i' is not defined 

どうすればよいですか?

ありがとうございます!

+3

あなたがちょうど入力したものが値を返したので、Pythonプロンプトが何かを印刷するときはいつでも、それがあります。入力した式に変数を代入することでその値を保持できますが、何も出力されません。 – SingleNegationElimination

答えて

7

あなたは何かに[float(i) for i in xs]を割り当てる必要があり:

>>> new_list = [float(i) for i in xs] 
>>> new_list 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> new_list[0] 
12.0 
>>> new_list[5] 
17.0 
0

iはリスト内包内に存在します。

あなたは言いたい:

i = [float(i) for i in lst] 
+2

リストの理解の内側と外側の変数として 'i'を使うと、不必要な混乱を招く可能性があります。 – Johnsyweb

+0

か、むしろあなたが実際に*ほしいと思うのは、反復子の後にリストを名前付けするのがちょっと混乱するので、 'floatlist = [....'です。完全性のために – SingleNegationElimination

+1

、 'i'はPython 3のリスト内にのみ存在します。Python 2では、' i'が外部にアクセスできます。 – carl

1

リストカンプ内のvarは評価後、既存停止し、変数にバインドされた最後の繰り返しを残すforループとは異なり。マップを使用して

3

xs = '12 10 32 3 66 17 42 99 20'.split() 
new_xs = map(float, xs) 
+2

['map()'](http://docs.python.org/library/functions.html#map)を使用することは、これを実現するための最もきれいな方法です。 – Johnsyweb

0

これは、Pythonのバージョンに関連したものです。あなたがしなければ、Pythonの2日 を:見て

>>> i = 1234 
>>> j = [i for i in xrange(10)] 
>>> print i 
9 

しかし、これは、Python 3で修正されました:あなたは、Python 3.0またはより優れたを持っている場合は

>>> i = 1234 
>>> j = [i for i in range(10)] 
>>> print(i) 
1234 

は、変数だけ理解で利用できるようになります。

0

リストの理解に名前を割り当てる代わりに、Python対話モードでは、_というシンボルがインタープリタによって評価された最後の式に自動的に割り当てられます。したがって、次のようにすることができます:

>>> xs = '12 10 32 3 66 17 42 99 20'.split() 
>>> [float(i) for i in xs] 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> _ 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> _[2] 
32.0 
>>> _ 
32.0 
関連する問題