将矩阵从字符串转换为整数

Convert a matrix from string to integer

我正在尝试将数字矩阵从字符串更改为整数,但它不起作用。

for element in list:
    for i in element:
        i = int(i)

我做错了什么?

编辑: 这是完整的代码:

import numpy as np

t_list = []
t_list = np.array(t_list)

list_rains_per_months = [['63', '65', '50', '77', '66', '69'],
 ['65', '65', '67', '50', '54', '58'],
 ['77', '73', '80', '83', '89', '100'],
 ['90', '85', '90', '90', '84', '90'],
 ['129', '113', '120', '135', '117', '130'],
 ['99', '116', '114', '111', '119', '100'],
 ['105', '98', '112', '113', '102', '100'],
 ['131', '120', '111', '141', '130', '126'],
 ['85', '101', '88', '89', '94', '91'],
 ['122', '103', '119', '98', '101', '107'],
 ['121', '101', '104', '121', '115', '104'],
 ['67', '44', '58', '61', '64', '58']]

for element in t_list:
    for i in element:
        i = int(i)

对于任何错误,我深表歉意,我是新手 python

在 numpy 中你就是这样做的。

import numpy as np

list_rains_per_months = [['63', '65', '50', '77', '66', '69'],
 ['65', '65', '67', '50', '54', '58'],
 ['77', '73', '80', '83', '89', '100'],
 ['90', '85', '90', '90', '84', '90'],
 ['129', '113', '120', '135', '117', '130'],
 ['99', '116', '114', '111', '119', '100'],
 ['105', '98', '112', '113', '102', '100'],
 ['131', '120', '111', '141', '130', '126'],
 ['85', '101', '88', '89', '94', '91'],
 ['122', '103', '119', '98', '101', '107'],
 ['121', '101', '104', '121', '115', '104'],
 ['67', '44', '58', '61', '64', '58']]

list_rains_per_months = np.array(list_rains_per_months)
myfunc = np.vectorize(lambda x: int(x))
list_rains_per_months = myfunc(list_rains_per_months)
print(list_rains_per_months)

输出

[[ 63  65  50  77  66  69]
 [ 65  65  67  50  54  58]
 [ 77  73  80  83  89 100]
 [ 90  85  90  90  84  90]
 [129 113 120 135 117 130]
 [ 99 116 114 111 119 100]
 [105  98 112 113 102 100]
 [131 120 111 141 130 126]
 [ 85 101  88  89  94  91]
 [122 103 119  98 101 107]
 [121 101 104 121 115 104]
 [ 67  44  58  61  64  58]]

你做错了什么,你没有改变列表或任何列表元素:循环内的 'i' 首先指向列表的每个元素,然后你指向到别的东西,但这不会影响你的列表(另外,避免使用 'list' 作为标识符,它是一个现有的类型,这是自找麻烦)。

一种方法是使用列表理解。假设您的矩阵是(内部)列表的列表,例如:

a_list = [["3", "56", "78"], ["2", "39", "60"], ["87", "9", "71"]]

那么两个嵌套的列表理解应该可以解决问题:

a_list = [[int(i) for i in inner_list] for inner_list in a_list]

这将构建一个新列表,通过遍历您的初始列表,应用您想要的更改,将其保存到另一个(或相同的)列表。

您可以在循环中使用枚举对象:

list = [["12", "10", "0"],
        ["0", "33", "60"]]

for h, i in enumerate(list):
    for j, k in enumerate(i):
        list[h][j] = int(k)
print(list)

也可以只是 map 每行的值 int:

for row in list_rains_per_months:
    row[:] = map(int, row)

请注意,我分配给 row[:],即 进入 行,从而进入矩阵。如果我改为分配给 row,我会遇到与您的 i 相同的问题:我只会分配给变量,而不分配给 row/matrix.