将列表字符串转换为整数

时间:2017-05-21 16:19:41

标签: python string python-2.7 list

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

错误为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']]

如何避免列表输入错误?

5 个答案:

答案 0 :(得分:4)

问题是您list1包含字符串列表列表。不是字符串列表

这取决于你想要什么。

  • 如果您想要一个整体列表,您可以这样做:

    [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]
    
  • 另一方面,如果您需要整体列表列表,则可以使用:

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

答案 1 :(得分:2)

您正在处理列表的列表。这应该可以用于获取整数列表:

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

答案 2 :(得分:1)

当您说某些内容时,例如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)

答案 3 :(得分:0)

如果内部列表的长度始终为1:

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

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

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

答案 4 :(得分:0)

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

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

问题在于你无法直接将列表转换为整数,即使它只有1个元素。

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

虽然,我认为这是解决问题的最佳方法,但更多的是" pythonic"解决这个问题的方法是使用内置函数map。并执行以下操作:map(list1, int)。在这种方法中,您还需要先将列表展平。