我在这里看到了各种答案,但没有一个回答我的问题。我想下面的列表将字符串列表转换为可能的整数
list = ['A', '2', '8', 'B', '3']
转换为以下几点:
list = ['A', 2, 8, 'B', 3]
我想保持串为字符串,但是转换字符串整数如果可能的话。
我知道我可以做这样的事情:
list = [int(i) for i in list]
如果只是数字,但我不确定如何做到这一点时,它是混合的。
我在这里看到了各种答案,但没有一个回答我的问题。我想下面的列表将字符串列表转换为可能的整数
list = ['A', '2', '8', 'B', '3']
转换为以下几点:
list = ['A', 2, 8, 'B', 3]
我想保持串为字符串,但是转换字符串整数如果可能的话。
我知道我可以做这样的事情:
list = [int(i) for i in list]
如果只是数字,但我不确定如何做到这一点时,它是混合的。
您可以使用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]
这对于负数不起作用。 – wds
@ wds的例外是你为什么一般比[LBYL]更喜欢[EAFP](https://docs.python.org/3/glossary.html#term-eafp)模式(https://docs.python.org/3 /glossary.html#term-lbyl);尝试做你想做的事情,如果失败则处理异常。不要试图编写一个解析器来预先检查你的条件(你每次都会错过一个边缘案例),只要这样做,并适当地处理失败。 'int()'知道如何解析,不要重新发明轮子。仅供参考,'int'还允许任意的前导和尾随空格; 'int('-2')'完全合法,但会失败'isdigit'测试。 – ShadowRanger
总是有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]
我只想提取转化成功能。
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,以便我们仍然可以使用列表构造函数(如果需要)。
为了概括起来,你可能想要做'except(ValueError,TypeError):',所以你不要在不能成为'int'的类型上(例如'list','tuple'等等)。如果'list'全部是'str','ValueError'就没问题,但如果它是混合类型的,并且只想转换类似int的'str'而不改变其他东西,那么处理TypeError会让你感觉到。 – ShadowRanger
听起来很公平。该问题仅提及整数或字符串,因此实施者应该知道哪一个是合适的。我已经更新了我的答案,因为它使得该功能在这种情况下更加灵活。 – Shadow
您可以使用尝试,除块
lst1 = ['A', '2', '8', 'B', '3']
lst2 = []
for i in lst1:
try:
lst2.append(int(i))
except ValueError:
lst2.append(i)
print lst2
最好不要阴影保留的名称像'list'。 –