假设我有一个这样的列表:
a = ['hello','1','hi',2,'something','3']
我想在保留字符串的同时将列表中的数字转换为浮点数。
我写了这个:
for i in a:
try:
i = float(i)
except ValueError:
pass
有没有更有效和更简洁的方法来做到这一点?
假设我有一个这样的列表:
a = ['hello','1','hi',2,'something','3']
我想在保留字符串的同时将列表中的数字转换为浮点数。
我写了这个:
for i in a:
try:
i = float(i)
except ValueError:
pass
有没有更有效和更简洁的方法来做到这一点?
根据您已经尝试过的:
a = ['hello', '1.0', 'hi', 2, 'blah blah', '3']
def float_or_string(item):
try:
return float(item)
except ValueError:
return item
a = map(float_or_string, mylist)
应该做的伎俩。我想说一个try:... except:...
块既a)高效又b)整洁。正如halex指出的那样,map()
不会更改列表,它会返回一个新列表,并且您设置a
为等于它。
try/except 方式是 Pythonic 的方式,但如果你真的讨厌它,看看这是否符合你的目的:
a = ['hello','1','hi',2,'something','3']
pattern = re.compile(r'^(-?\d+)(\.\d+)?')
b = [float(item) if isinstance(item, str) and re.match(pattern, item)
else item for item in a]
您正在更改变量的值i
-> 数组的内容a
没有改变!如果你想改变数组中的值,你应该像这样实现它:
for index, value in enumerate(a):
try :
a[index] = float(value)
except ValueError :
pass
我的简短示例是什么:
a = ['hello','1','hi',2,'something','3']
for i, item in enumerate(a):
if str(item).isdigit():
a[i] = float(item)
print a
我认为这是简短而更好的方法:
a = ['hello','1','hi',2,'something','3']
for index,value in enumerate(a):
if isinstance(value,int):
a[index] = float(value)
print a
输出是:['hello', '1', 'hi', 2.0, 'something', '3']