如何在Python3中将一个字符串数字列表转换为整数?

4

可能是重复的问题:如何在Python中将字符串转换为整数?

大家好,

我正在尝试将嵌套列表中的这些字符串整数转换为整数。这是我的列表:

listy = [['+', '1', '0'], ['-', '2', '0']]

我正在尝试转换为:

[['+', 1, 2], ['-', 2, 0]]

这是我迄今为止尝试过的,但我的第二行代码取自问题如何在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中修复这个问题?

修改您的映射,如下所示:[list(map(lambda x: int(x) if x.isdigit() else x,a)) for a in listy] - Sohaib Farooqi
3个回答

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]]

isdigit() 仅识别无符号整数。可能对操作足够了。更多相关信息请参考:https://dev59.com/P3M_5IYBdhLWcg3wslfs - greedy52

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]]

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接