如何在Python3中将字符串列表转换为int number?

vxqlmq5t  于 2023-04-04  发布在  Python
关注(0)|答案(3)|浏览(158)

此问题在此处已有答案

How do I check if a string represents a number (float or int)?(40个答案)
How can I collect the results of a repeated calculation in a list, dictionary etc. (or make a copy of a list with each element modified)?(2个答案)
1分钟前关闭。
可能重复:How to convert strings into integers in Python?
大家好
我正在尝试将这个字符串integers从嵌套列表转换为integers。这是我的列表:

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中解决这个问题?

soat7uwm

soat7uwm1#

您可以使用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]]
fnvucqvd

fnvucqvd2#

你得到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]]
332nm8kg

332nm8kg3#

您的解决方案的问题是,两个内部数组中的第一个项都不是数字,因此当您尝试转换它们时,它会给您这个错误。
如果你不知道非数字的位置,你可以这样做:

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)

相关问题