【问题标题】:Convert a matrix from string to integer将矩阵从字符串转换为整数
【发布时间】:2023-03-12 01:22:01
【问题描述】:

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

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 新手

【问题讨论】:

    标签: python string matrix type-conversion integer


    【解决方案1】:

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

    【讨论】:

    • 我正在使用列表列表,所以它不起作用。如何在矩阵中应用您的解决方案?
    • 现在有帮助吗?
    • 我找到了解决方案,但感谢您的帮助
    • 这里是 numpy 的解决方案
    【解决方案2】:

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

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

    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]
    

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

    【讨论】:

    • 感谢您的解释,但我的是列表列表,我认为您的解决方案仅适用于简单列表,如何针对矩阵修改它?编辑:我试过这个: for element in my_list: element = [int(i) for i in element] 但它仍然不起作用
    • 我的解释是基于您展示的代码,请在代码示例中包含您的数据示例。
    • 谢谢!你救了我,你的解决方案有效,现在我明白了我的错误
    • @marcoboh 如果对您有帮助,请通过选择相关答案旁边的勾号来接受答案。
    【解决方案3】:

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

    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)
    

    【讨论】:

    • 我收到这个错误:'type' object is not subscriptable
    • 您忘记将结束] 添加到列表中。
    • 枚举有问题,但还是谢谢!我得到了解决方案
    • 我已经修好了支架,对此感到抱歉。我也是新人:S
    【解决方案4】:

    也可以将map每一行的值改为int

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 2019-09-15
      • 1970-01-01
      • 2014-01-14
      相关资源
      最近更新 更多