将字符串列表转换为整数,但输出是拆分数字而不是

将字符串列表转换为整数,但输出是拆分数字而不是

问题描述:

所以我有一个数组值的列表,它是字符串类型。有些列表的元素包含多个数值,例如:将字符串列表转换为整数,但输出是拆分数字而不是

AC_temp= ['22', '45, 124, 12', '14', '12, 235']

我试图把这些元素融入到整数,同时还节约了子列表/元组,所以我希望它看起来像:

AC_temp=[22, [45, 124, 12], 14, [12, 235]]

当我运行以下命令:

 for x in AC_temp: 
      if "," in x: #multiple values 
       val= x.split(",") 
       print(val) 

我得到的输出我想到:

['187', '22'] 
['754', '17'] 
['417', '7'] 
['819', '13'] 
['606', '1'] 
['123', '513'] 

但是当我尝试通过以下将它们变成整数:

 for x in AC_temp: 
      if "," in x: 
       val= x.split(",") 
       for t in val: 
        AC.append(map(int, t)) 
      else: 
       AC.append(map(int, x) 

     #print output# 
     for i in AC: 
      print(i) 

它单独打印出来的数字是这样的:

[1, 8, 7] 
[2, 2] 
[7, 5, 4] 
[1, 7] 
[4, 1, 7] 
[7] 
[8, 1, 9] 
[1, 3] 
[6, 0, 6] 
[1] 
[1, 2, 3] 
[5, 1, 3] 

我做错了什么?

+0

可能的重复[如何将字符串转换为Python中的整数?](https://*.com/questions/642154/how-to-convert-strings-into-integers-in-python) – scharette

你不需要for -loop,因为map在分裂的元素已经迭代:

AC = [] 
    for x in AC_temp: 
     if "," in x: 
      val= x.split(",") 
      AC.append(list(map(int, val)) 
     else: 
      AC.append([int(x)]) 

    #print output# 
    for i in AC: 
     print(i) 

或在更紧凑的形式:

AC = [list(map(int, x.split(","))) for x in AC_temp] 

    #print output# 
    for i in AC: 
     print(i) 
+1

请注意,这并不保留子列表 - 做到这一点,将'.extend'改为'.append' –

+0

你是对的,回答更新。 – Daniel

+0

@Daniel返回'[[22],[45,124,12],[14],[12,235]]''。即使是单个元素都在列表中。 –

怎么样list-comprehension

AC_temp= ['22', '45, 124, 12', '14', '12, 235'] 

AC = [int(x) if ',' not in x else list(map(int, x.split(','))) for x in AC_temp] 
print(AC) # [22, [45, 124, 12], 14, [12, 235]] 

请注意,如果您正在使用Python2,你并不需要转换maplist;它已经是list

一个不错的易读的方式做,这是使用列表理解逐渐改变列表:

AC_temp= ['22', '45, 124, 12', '14', '12, 235'] 

individual_arrays = [i.split(", ") for i in AC_temp] 
# ...returns [['22'], ['45', '124', '12'], ['14'], ['12', '235']] 

each_list_to_integers = [[int(i) for i in j] for j in individual_arrays] 
# ...returns [[22], [45, 124, 12], [14], [12, 235]] 

或替代,组合成一条线:

numbers_only = [[int(i) for i in j] for j in [i.split(", ") for i in AC_temp]] 

然后,如果你愿意,你可以打破它们的封闭列表中的单个数字:

no_singles = [i[0] if len(i) == 1 else i for i in each_list_to_integers]