将字符串列表转换为整数,但输出是拆分数字而不是
所以我有一个数组值的列表,它是字符串类型。有些列表的元素包含多个数值,例如:将字符串列表转换为整数,但输出是拆分数字而不是
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]
我做错了什么?
你不需要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)
请注意,这并不保留子列表 - 做到这一点,将'.extend'改为'.append' –
你是对的,回答更新。 – Daniel
@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,你并不需要转换map
到list
;它已经是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]
可能的重复[如何将字符串转换为Python中的整数?](https://stackoverflow.com/questions/642154/how-to-convert-strings-into-integers-in-python) – scharette