Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python将列表中的整数/浮点更改为无_Python_List_Python 2.7 - Fatal编程技术网

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

python将列表中的整数/浮点更改为无,python,list,python-2.7,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

嘿,我正试图更改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,]

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

您应该避免在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
。而且
范围
端点是独占的(它向上到达端点
-1
,您再次从中减去
1
),因此您的意思是
范围(len(content2))

对代码的这种修改是有效的:

for i in range(len(content2)):
    if content2[i] == 0.0:
        content2[i] = None
最好使用一个隐含的事实,即Python中的
int
s等于
0
求值为false,这样也同样适用:

for i in range(len(content2)):
    if not content2[i]:
        content2[i] = None
对于列表和元组,您也可以习惯于这样做,而不是按照

我建议的清单是:

content2[:] = [float(x) if x else None for x in content2]
在语义上等同于

res = []
for x in content2:
    if x: # x is not empty (0.0)
        res.append(float(x))
    else:
        res.append(None)
content2[:] = res # replaces items in content2 with those from res

您应该在此处使用列表理解:

>>> 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]

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

for i in range(len(content2)):
    if content2[i]==0:
        content2[i] = None
在代码中,从行中的列表中减去一个整数:

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

但从列表中减去整数并没有定义。len(content2)返回一个整数,该整数等于列表中所需的元素数。

尝试
len(content2)-1
作为
range
@chepner的参数,这仍然是错误的<代码>范围
是独占的。因此,这将上升到使用你的代码的
len(content2)-2
。我知道一些看起来很有趣的事情。请说明你在做什么。我怀疑Python新手是否理解列表理解是什么,更不用说它是做什么的了。在
content2
之后使用
[:]
有什么特别的原因吗?@tobias_k它会变异
content2
本身,而不是将名称分配给一个新的列表。如果您在操作之前有另一个变量,如
y=content2
,则在此之后它将被更新,而不是参考旧列表。请包括您正在执行的操作的说明。“我怀疑任何一个Python新手都不理解列表理解是什么,更不用说它是做什么的了。”thegrinner补充了一个非常详细的解释