可能重复:How to convert strings into integers in Python?
大家好,
我正在尝试将此字符串整数从嵌套列表转换为整数。这是我的清单:
listy = [['+', '1', '0'], ['-', '2', '0']]
我试图转换为:
[['+', 1, 2], ['-', 2, 0]]
这是我到目前为止所尝试过的,但我的第二行代码取自问题How to convert strings into integers in Python?中的一个答案
listy = [['+', '1', '0'], ['-', '2', '0']]
T2 = [list(map(int, x)) for x in listy]
print(T2)
但它给了我一个错误:
ValueError: invalid literal for int() with base 10: '+'
有没有办法在Python 3中解决这个问题?
答案 0 :(得分:7)
您可以使用isdigit()
:
x = [['+', '1', '0'], ['-', '2', '0']]
x = [[int(i) if i.isdigit() else i for i in j] for j in x]
输出:
[['+', 1, 0], ['-', 2, 0]]
如果你想要一个适用于有符号整数的解决方案:
x = [['+', '1', '0'], ['-', '-2', '0']]
def check_conversion(x):
try:
return int(x)
except:
return x
x = [list(map(check_conversion, i)) for i in x]
输出:
[['+', 1, 0], ['-', -2, 0]]
答案 1 :(得分:1)
您获得了ValueError,因为'+'
和'-'
无法转换为int
类型。因此,您需要检查要转换的每个字符串的类型和/或内容。以下示例检查子列表中的每个项目是否仅包含数字0-9:
listy = [['+', '1', '0'], ['-', '2', '0']]
T2 = [[int(x) if x.isdigit() else x for x in sublisty] for sublisty in listy]
print(T2)
>>> [['+', 1, 0], ['-', 2, 0]]
答案 2 :(得分:0)
您的解决方案的问题是两个内部数组中的第一项都不是数字,所以当您尝试转换它们时,它会给您带来错误。
如果您不知道非数字的位置,您可以这样做:
outerList = [['+', '1', '0'], ['-', '2', '0']]
result = []
for innerList in outerList:
innerResult = []
for elem in innerList:
try:
number = int(elem)
innerResult.append(number)
except Exception as e:
innerResult.append(elem)
result.append(innerResult)
print(result)
如果它始终是第一个不是数字的那个,那么你可以这样做:
outerList = [['+', '1', '0'], ['-', '2', '0']]
result = []
for innerList in outerList:
innerResult = []
for i, elem in enumerate(innerList):
if i == 0:
innerResult.append(elem)
else:
innerResult.append(int(elem))
result.append(innerResult)
print(result)