说我有一个这样的名单:转换列表和浮动
我想将数字转换列表中的成浮点同时保持字符串。
我写了这个:
for i in a:
try:
i = float(i)
except ValueError:
pass
是否有一个更高效,更简洁的方式来做到这一点?
说我有一个这样的名单:转换列表和浮动
我想将数字转换列表中的成浮点同时保持字符串。
我写了这个:
for i in a:
try:
i = float(i)
except ValueError:
pass
是否有一个更高效,更简洁的方式来做到这一点?
您正在更改变量的值i
- >数组a
的内容不会改变! 如果你想改变数组中的值,你倒是应该实现这样的:
for index, value in enumerate(a):
try :
a[index] = float(value)
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 /除的方法是做它的Python的方式,但如果你真的讨厌它,看是否能成为你的目的:
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]
正则表达式?似乎有点像用霰弹枪杀死蟑螂:) –
@JoelCornett哈哈,我以为OP不喜欢尝试/除了这样做的方式,所以也许对他更好。 –
什么是我的简单的例子:
a = ['hello','1','hi',2,'something','3']
for i, item in enumerate(a):
if str(item).isdigit():
a[i] = float(item)
print a
它会在'“1.0”'上破坏。不知道OP是否计划采用这些方案。 –
我认为这是短期和更好的方式:
a = ['hello','1','hi',2,'something','3']
for index,value in enumerate(a):
if isinstance(value,int):
a[index] = float(value)
print a
输出为: '你好', '1', '喜',2.0 '东西', '3']
数字总是在相同的位置吗? –