Python-如何将字符串矩阵转换为int?
我得到了列表的2D矩阵,字符串如下:Python-如何将字符串矩阵转换为int?,python,python-3.x,Python,Python 3.x,我得到了列表的2D矩阵,字符串如下: somelist = [["12","10","0"] ["0","33","60"]] 我需要将所有这些str转换为int。 到目前为止,我的代码是: for i in somelist: for j in i: j = int(j) 或使用地图: >>> [list(map(int, x)) for x in somelist] [[12, 10, 0], [0, 33
somelist = [["12","10","0"]
["0","33","60"]]
我需要将所有这些str
转换为int
。
到目前为止,我的代码是:
for i in somelist:
for j in i:
j = int(j)
或使用地图:
>>> [list(map(int, x)) for x in somelist]
[[12, 10, 0], [0, 33, 60]]
这是您的固定代码:
somelist = [["12","10","0"],
["0","33","60"]]
for n, i in enumerate(somelist):
for k, j in enumerate(i):
somelist[n][k] = int(j)
print(somelist)
输出:
[[12, 10, 0], [0, 33, 60]]
或使用地图:
>>> [list(map(int, x)) for x in somelist]
[[12, 10, 0], [0, 33, 60]]
这是您的固定代码:
somelist = [["12","10","0"],
["0","33","60"]]
for n, i in enumerate(somelist):
for k, j in enumerate(i):
somelist[n][k] = int(j)
print(somelist)
输出:
[[12, 10, 0], [0, 33, 60]]
您的代码无法工作,因为Python中的
int
是一个不可变类型。如果我改变一个int变量,它不会改变地址中的值,但会改变整个变量。因此,以前持有它的任何列表或对象都不会更改。以下是一些例子:
In [1]: a_list = [1,2,3]
In [2]: var = a_list[0]
In [3]: var
Out[3]: 1
In [4]: id(var)
Out[4]: 4465792624
In [5]: var = 30
In [6]: id(var) # A different address
Out[6]: 4465793552
In [7]: a_list
Out[7]: [1, 2, 3]
In [8]: id(a_list[0])
Out[8]: 4465792624
In [9]: a_list[0] = 30
In [10]: a_list
Out[10]: [30, 2, 3]
这就是为什么如果您做了这一微小的更改,您的代码将正常工作:
for i in somelist:
for ind, j in enumerate(i):
i[ind] = int(j)
您的代码无法工作,因为Python中的
int
是一个不可变类型。如果我改变一个int变量,它不会改变地址中的值,但会改变整个变量。因此,以前持有它的任何列表或对象都不会更改。以下是一些例子:
In [1]: a_list = [1,2,3]
In [2]: var = a_list[0]
In [3]: var
Out[3]: 1
In [4]: id(var)
Out[4]: 4465792624
In [5]: var = 30
In [6]: id(var) # A different address
Out[6]: 4465793552
In [7]: a_list
Out[7]: [1, 2, 3]
In [8]: id(a_list[0])
Out[8]: 4465792624
In [9]: a_list[0] = 30
In [10]: a_list
Out[10]: [30, 2, 3]
这就是为什么如果您做了这一微小的更改,您的代码将正常工作:
for i in somelist:
for ind, j in enumerate(i):
i[ind] = int(j)
在你的问题“但不起作用”中,没有充分解释什么“不起作用”。请解释一下当你执行代码时会发生什么,以及你期望的是什么。@Jean-François Fabre介意添加到副本列表中吗?这个函数处理的是输入是否是浮点。在你的问题“但不工作”中,它没有充分解释什么不工作。请解释一下当你执行代码时会发生什么,以及你期望的是什么。@Jean-François Fabre介意添加到副本列表中吗?这个函数处理的是输入是否是浮点。为什么不全速运行
map
:)list(map(list,(map(int,x)表示somelist中的x))
为什么不全速运行map
:)list(map(list,(map(int,x)表示somelist中的x))