[浮动(i)为我在lst]

时间:2011-05-15 22:48:04

标签: python python-3.x

prorgamming新手 - 我正在寻找我正在做的练习的答案,并从here得到答案。我的问题是这个 - 从那个帖子中,被选为最佳答案的是这段代码

[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  

我该怎么做?

谢谢!

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

使用地图:

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

答案 2 :(得分:1)

与将最后一次迭代绑定到变量的循环不同,列表中的var在评估后停止存在。

答案 3 :(得分:0)

i仅存在于列表推导中。

你想说:

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

答案 4 :(得分:0)

这与Python版本有关。看: 在Python 2上,如果你这样做:

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

但这已在Python 3中修复:

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

如果您使用的是Python 3.0或更高版本,则该变量仅在理解中可用。它不会影响环境的其他部分

答案 5 :(得分: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