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
我该怎么做?
谢谢!
答案 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