我在这里看到了各种各样的答案,但没有一个能完全回答我的问题。我想转换以下列表
True
以下内容:
list = ['A', '2', '8', 'B', '3']
我希望将字符串保留为字符串,但尽可能将字符串转换为int。
我知道我可以这样做:
list = ['A', 2, 8, 'B', 3]
如果它只是数字,但我不确定如何混合它。
答案 0 :(得分:3)
总是try
/ except
:
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]
答案 1 :(得分:2)
您可以使用str.isdigit()
:
>>> l = ['A', '2', '8', 'B', '3']
>>> [int(x) if x.isdigit() else x for x in l]
['A', 2, 8, 'B', 3]
考虑负数:
>>> 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]
答案 2 :(得分:1)
我只是将转换提取到函数中。
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,以便我们仍然可以使用列表构造函数。
答案 3 :(得分:0)
你可以使用try,除了块
lst1 = ['A', '2', '8', 'B', '3']
lst2 = []
for i in lst1:
try:
lst2.append(int(i))
except ValueError:
lst2.append(i)
print lst2