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