Python 尽可能将字符串列表转换为整数
我在这里看到了各种各样的答案,但没有一个完全回答了我的问题。我正在尝试转换以下列表Python 尽可能将字符串列表转换为整数,python,python-3.x,list,Python,Python 3.x,List,我在这里看到了各种各样的答案,但没有一个完全回答了我的问题。我正在尝试转换以下列表 list = ['A', '2', '8', 'B', '3'] 对下列事项: list = ['A', 2, 8, 'B', 3] 我希望将字符串保留为字符串,但尽可能将字符串转换为int 我知道我可以这样做: list = [int(i) for i in list] 如果只是数字,但我不确定混合时如何操作。您可以使用str.isdigit(): 考虑到负数: >>> l = ['A'
list = ['A', '2', '8', 'B', '3']
对下列事项:
list = ['A', 2, 8, 'B', 3]
我希望将字符串保留为字符串,但尽可能将字符串转换为int
我知道我可以这样做:
list = [int(i) for i in list]
如果只是数字,但我不确定混合时如何操作。您可以使用
str.isdigit()
:
考虑到负数:
>>> l = ['A', '2', '8', 'B', '-3']
>>> [int(x) if x.isdigit() or x.startswith('-') and x[1:].isdigit() else x for x in l]
>>> ['A', 2, 8, 'B', -3]
除了,总是有
尝试
/:
oldlist = ['A', '2', '8', 'B', '3']
newlist = []
for x in oldlist:
try:
newlist.append(int(x))
except ValueError:
newlist.append(x)
newlist
# ['A', 2, 8, 'B', 3]
我只是将转换提取为一个函数
def int_if_possible(value):
try:
return int(value)
except (ValueError, TypeError):
return value
int_list = [int_if_possible(i) for i in int_list]
此外,我还将列表重命名为int_list,以便在需要时仍然可以使用列表构造函数。您可以使用try,除了block
lst1 = ['A', '2', '8', 'B', '3']
lst2 = []
for i in lst1:
try:
lst2.append(int(i))
except ValueError:
lst2.append(i)
print lst2
最好不要像list
@wds这样对保留名称进行阴影处理,这就是为什么您通常更喜欢模式而不是;尝试执行您想要执行的操作,并在异常失败时处理异常。不要试图编写解析器来预先检查您的条件(您每次都会错过一个边缘情况),只需这样做,并适当地处理故障int()
知道如何解析,不要重新发明轮子。仅供参考,int
还允许任意前导和尾随空格int('-2')
是完全合法的,但将无法通过isdigit
测试。一般来说,您可能需要执行除了(ValueError,TypeError):
,这样您就不会吐出永远不能是int
的类型(例如列表
,元组
,等等)。如果列表
都是str
,ValueError
就可以了,但是如果它是混合类型,并且你只想转换int
,比如str
,而其他东西不动,那么处理TypeError
就可以了。听起来很公平。这个问题只提到int或string,所以具体哪一个是合适的取决于实现者。不过我更新了我的答案,因为在这种情况下,它使函数更加灵活。
lst1 = ['A', '2', '8', 'B', '3']
lst2 = []
for i in lst1:
try:
lst2.append(int(i))
except ValueError:
lst2.append(i)
print lst2