繁体   English   中英

将列表字符串转换为整数

[英]Converting list strings to integers

我正在尝试将字符串列表转换为整数,但是无论我使用哪种方法进行转换,它始终会因相同的错误而失败。

错误是TypeError: int() argument must be a string or a number, not 'list'

这是我尝试过的代码:

#list2 = [int(s) for s in list1]
#list2 = map(int, list1)
try:
    for i in list1 :
        list2.append(int(list1));
except :
    print "The int conversion failed"

print list2

初始列表list1仅包含一些字符串号:

[['4183'], ['4034'], ['3342'], ['3482'], ['8567'], ['1052'], ['8135'], ['5561'], ['517'], 
 ['1218'], ['8877']]

如何避免列表输入错误?

问题是您list1包含一个字符串列表的列表 没有字符串列表

这取决于您想要什么。

  • 如果要获取ints列表 ,可以执行以下操作:

     [int(x) for line in list1 for x in line] 

    这将产生:

     >>> [int(x) for line in list1 for x in line] [4183, 4034, 3342, 3482, 8567, 1052, 8135, 5561, 517, 1218, 8877] 
  • 另一方面,如果您想要一个ints列表 ,则可以使用:

     [[int(x) for x in line] for line in list1] 

    这将产生:

     >>> [[int(x) for x in line] for line in list1] [[4183], [4034], [3342], [3482], [8567], [1052], [8135], [5561], [517], [1218], [8877]] 

您正在处理是字符串列表 这应该可以获取整数列表:

lst = [['4183'], ['4034'], ['3342'], ['3482'], ['8567'], ['1052'], ['8135'], ['5561'], ['517'], ['1218'], ['8877']]

[int(x[0]) for x in lst]
=> [4183, 4034, 3342, 3482, 8567, 1052, 8135, 5561, 517, 1218, 8877]

或者,如果您打算保留列表列表,但要使用整数:

[[int(x[0])] for x in lst]
=> [[4183], [4034], [3342], [3482], [8567], [1052], [8135], [5561], [517], [1218], [8877]]

例如,当您说某事是i = ['3342'] ,您是说这是一个包含一个字符串('3342')的列表。

此外,当使用for循环时,应将列表中的每个对象引用为在for之后声明的变量:

list1 = ['4183', '4034', '3342', '3482', '8567', '1052', '8135', '5561', '517', '1218', '8877']
list2 = []
try:
    for i in list1 :
        list2.append(int(i))
except :
    print("The int conversion failed")

print(list2)

如果内部列表始终具有长度1:

list2 = map(lambda xs: int(xs[0]), list1)

对于任意长度的内部列表:

from functools import partial
list2 = map(partial(map, int), list1)

您得到的错误是因为您试图将整个列表转换为整数。 正确的方法是list2.append(int(i)) 但这也不起作用,因为您有一个2D数组而不是一个简单的列表。 for i in list1使用for i in list1循环遍历数组时,每次迭代都会得到一个包含1个元素的列表。

['4183'] # 1st iteration
['4034'] # 2nd iterativo etc...

这样做的问题是,即使列表只有1个元素,也无法将其直接转换为整数。

为了解决这个问题,您可以为每个i进行另一个for循环(非常不合适的方法,但是可行!)。 或者,您可以尝试展平原始列表,然后您的for循环将起作用(只是不要忘记将list1更改为i )。

虽然,我认为解决问题的最好方法是使用内置函数map来解决此问题,但是这是更“ pythonic”的方法。 然后执行以下操作: map(list1, int) 在这种方法中,您还需要先将列表变平。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM