假设我有这些数据:
[[u'alpha',u'0.1'],[u'bravo',u'0.2']]
我想要实现的是将每个项目的第二个元素更改为浮动
这是我的代码。它能够获得我想要的输出,但我正在寻找更简单,更通用的东西。例如,元素可能是100个中的第99个,或者我想将第一个元素更改为标题大小写。
我正在探索地图和lambda,但在这种情况下无法看到如何使用它。
#!/bin/env python
data = [[u'alpha',u'0.1'],[u'bravo',u'0.2']]
print data
tgb=[]
for item in data:
rfv=[]
for x,elem in enumerate(item):
if x == 1:
rfv.append(float(elem))
else:
rfv.append(elem)
tgb.append(rfv)
print tgb
输出:
[[u'alpha', u'0.1'], [u'bravo', u'0.2']]
[[u'alpha', 0.1], [u'bravo', 0.2]]
答案 0 :(得分:1)
让我们解决你在问题中提到的地图, lambda 和切片。如果您知道要修改的索引,可以执行以下操作:
print map(lambda x,index=1:x[:index]+[float(x[index])]+x[index+1:] ,s)
请注意,我使用1作为索引的默认值。
演示:
>>s=[[u'alpha',u'0.1',u'0.1'],[u'bravo',u'0.2',u'0.1',u'0.1']]
>>print map(lambda x,index=1 : x[:index] + [float(x[index])] + x[index+1:] , s)
[[u'alpha', 0.1, u'0.1'], [u'bravo', 0.2, u'0.1', u'0.1']]
答案 1 :(得分:1)
您可以执行以下操作:
def convert(x):
try:
return float(x)
except ValueError, e:
return x.title()
data = [[u'alpha',u'0.1'], [u'bravo',u'0.2'], [u'charlie', u'0.1', u'0.2', u'0.3', u'0.4']]
data = [[convert(element) for element in entry] for entry in data]
print data
这将尝试将所有项目转换为浮点数,但如果它们无法以标题格式转换,则将它们保留为字符串。这将显示以下输出:
[[u'Alpha', 0.1], [u'Bravo', 0.2], [u'Charlie', 0.1, 0.2, 0.3, 0.4]]
这也适用于100个元素。注意,不可能将lambda用于convert()
函数,因为它需要是单个表达式。
或者,map()
可用于提供相同的结果:
data = [map(convert, entry) for entry in data]