python将整数/浮点数更改为列表中的无

时间:2013-06-10 14:14:08

标签: python list python-2.7

嘿,我正在尝试更改我的Python列表中的元素,而我却无法让它工作。

content2 = [-0.112272999846, -0.0172778364044, 0, 
            0.0987861891257, 0.143225416783, 0.0616318333661,
            0.99985834, 0.362754457762, 0.103690909138,
            0.0767353098528, 0.0605534405723, 0.0, 
            -0.105599793882, -0.0193182826135, 0.040838960163,]

 for i in range((content2)-1):
        if content2[i] == 0.0:
            content2[i] = None

print content2

需要制作:

   content2 = [-0.112272999846, -0.0172778364044, None,
               0.0987861891257, 0.143225416783, 0.0616318333661,
               0.99985834, 0.362754457762, 0.103690909138,
               0.0767353098528, 0.0605534405723, None,
               -0.105599793882, -0.0193182826135, 0.040838960163,]

我也尝试了其他各种方法。有人有想法吗?

3 个答案:

答案 0 :(得分:6)

您应该避免在Python中使用索引进行修改

>>> content2 = [-0.112272999846, -0.0172778364044, 0, 0.0987861891257,
 0.143225416783,     0.0616318333661, 0.99985834, 0.362754457762, 0.103690909138,
 0.0767353098528, 0.0605534405723, 0.0, -0.105599793882, -0.0193182826135, 
0.040838960163]
>>> [float(x) if x else None for x in content2]
[-0.112272999846, -0.0172778364044, None, 0.0987861891257, 0.143225416783, 0.0616318333661, 0.99985834, 0.362754457762, 0.103690909138, 0.0767353098528, 0.0605534405723, None, -0.105599793882, -0.0193182826135, 0.040838960163]

要将content2变为此列表理解的结果,请执行以下操作:

content2[:] = [float(x) if x else None for x in content2]

您的代码无效,因为:

range((content2)-1)

您试图从1中减去list。此外,range端点独占(它会移至端点- 1,您再次从中减去1)所以您的意思是{{1 }}

您对代码的修改有效:

range(len(content2))

使用Python中for i in range(len(content2)): if content2[i] == 0.0: content2[i] = None 等于int的隐含事实判断为false更好,所以这也同样合适:

0

您可以习惯为列表和元组执行此操作,而不是按照PEP-8

的建议检查for i in range(len(content2)): if not content2[i]: content2[i] = None

我建议的列表理解:

if len(x) == 0

在语义上等同于

content2[:] = [float(x) if x else None for x in content2]

答案 1 :(得分:3)

你应该在这里使用list comprehension:

>>> content2[:] = [x if x!= 0.0 else None for x in content2]
>>> import pprint
>>> pprint.pprint(content2)
[-0.112272999846,
 -0.0172778364044,
 None,
 0.0987861891257,
 0.143225416783,
 0.0616318333661,
 0.99985834,
 0.362754457762,
 0.103690909138,
 0.0767353098528,
 0.0605534405723,
 None,
 -0.105599793882,
 -0.0193182826135,
 0.040838960163]

答案 2 :(得分:1)

稍微修改一下代码会得到所需的结果:

for i in range(len(content2)):
    if content2[i]==0:
        content2[i] = None

在您的代码中,您从行中的列表中减去一个整数:

for i in range((content2)-1):

但未定义从列表中减去整数。 len(content2)返回一个整数,该整数等于列表中的元素数,这就是你想要的。