我正在尝试将字符串列表转换为整数,但无论使用哪种方法进行转换,它总会失败并出现相同的错误。
错误为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']]
如何避免列表输入错误?
答案 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)
。在这种方法中,您还需要先将列表展平。