python将列表中的整数/浮点更改为无
嘿,我正试图更改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
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补充了一个非常详细的解释