【问题标题】:How to convert 2D list of string into 2D list of integers in Python如何在 Python 中将二维字符串列表转换为二维整数列表
【发布时间】:2022-11-20 02:46:50
【问题描述】:

我编写了以下代码以将 csv 文件读入工作正常的多维列表。当我创建一个函数来计算 2D 列表的总数时,问题就出现了。发生这种情况是因为数字在 2D 列表中的字符串中,即

[['0', '0', '30', '2', '21', '13', '23'], .....,['8', '25', '1', '6', '21', '23', '0']]。

将字符串元素转换为二维列表中的整数的最简单方法是什么,例如

[[0, 0, 30, 2, 21, 13, 23],.....,[8, 25, 1, 6, 21, 23, 0]]

到目前为止我的代码

rows = 52
cols = 7

def populate2D():

  with open("rainfall.csv","r") as file:
    lineArray = file.read().splitlines()
    matrix = []
    for line in lineArray:
      matrix.append(line.split(","))

  return matrix

def display(matrix):

  print(matrix)
  
def yearly(matrix):

    total = 0
    for row in matrix:
      for value in row:
        total += value
    return total

matrix = populate2D()
display(matrix)
total = yearly(matrix)
print()
print("Total rainfall for the year is " + str(total))

文件

0,0,30,2,21,13,23
29,3,29,30,7,8,25
26,5,26,13,4,13,4
22,30,13,15,15,0,2
3,12,11,10,17,0,15
8,13,11,24,30,24,27
22,18,2,29,11,13,18
15,1,29,23,18,7,0
23,27,3,7,13,14,28
6,25,24,14,20,23,5
24,29,26,22,0,9,18
22,27,22,20,24,29,21
23,13,14,4,13,1,21
25,21,21,6,28,17,19
4,6,11,10,21,1,5
11,7,22,11,10,24,15
25,11,23,3,23,8,3
22,23,0,29,15,12,5
21,11,18,22,1,4,3
11,10,3,1,30,14,22
2,16,10,2,12,9,9
2,29,17,16,13,18,7
22,15,27,19,6,26,11
21,7,18,4,14,14,2
6,30,12,4,26,22,11
21,16,14,11,28,20,3
19,10,22,18,30,9,27
8,15,17,4,11,16,6
19,17,16,6,18,18,6
2,15,3,25,27,16,11
15,5,26,24,24,30,5
15,11,16,22,14,23,28
25,6,7,20,26,18,16
5,5,21,22,24,16,5
6,27,11,8,24,1,16
28,4,1,4,3,19,24
19,3,27,14,12,24,0
6,3,26,15,15,22,26
18,5,0,14,15,7,26
10,5,12,22,8,7,11
11,1,18,29,6,9,26
3,23,2,21,29,15,25
5,7,1,6,15,18,24
28,11,0,6,28,11,26
4,28,9,24,11,13,2
6,2,14,18,20,21,1
20,29,22,21,11,14,20
28,23,14,17,25,3,18
6,27,6,20,19,5,24
25,3,27,22,7,12,21
12,22,8,7,0,11,8
8,25,1,6,21,23,0

输出

$ python rainfall.py
[['0', '0', '30', '2', '21', '13', '23'], ['29', '3', '29', '30', '7', '8', '25'], ['26', '5', '26', '13', '4', '13', '4'], ['22', '30', '13', '15', '15', '0', '2'], ['3', '12', '11', '10', '17', '0', '15'], ['8', '13', '11', '24', '30', '24', '27'], ['22', '18', '2', '29', '11', '13', '18'], ['15', '1', '29', '23', '18', '7', '0'], ['23', '27', '3', '7', '13', '14', '28'], ['6', '25', '24', '14', '20', '23', '5'], ['24', '29', '26', '22', '0', '9', '18'], ['22', '27', '22', '20', '24', '29', '21'], ['23', '13', '14', '4', '13', '1', '21'], ['25', '21', '21', '6', '28', '17', '19'], ['4', '6', '11', '10', '21', '1', '5'], ['11', '7', '22', '11', '10', '24', '15'], ['25', '11', '23', '3', '23', '8', '3'], ['22', '23', '0', '29', '15', '12', '5'], ['21', '11', '18', '22', '1', '4', '3'], ['11', '10', '3', '1', '30', '14', '22'], ['2', '16', '10', '2', '12', '9', '9'], ['2', '29', '17', '16', '13', '18', '7'], ['22', '15', '27', '19', '6', '26', '11'], ['21', '7', '18', '4', '14', '14', '2'], ['6', '30', '12', '4', '26', '22', '11'], ['21', '16', '14', '11', '28', '20', '3'], ['19', '10', '22', '18', '30', '9', '27'], ['8', '15', '17', '4', '11', '16', '6'], ['19', '17', '16', '6', '18', '18', '6'], ['2', '15', '3', '25', '27', '16', '11'], ['15', '5', '26', '24', '24', '30', '5'], ['15', '11', '16', '22', '14', '23', '28'], ['25', '6', '7', '20', '26', '18', '16'], ['5', '5', '21', '22', '24', '16', '5'], ['6', '27', '11', '8', '24', '1', '16'], ['28', '4', '1', '4', '3', '19', '24'], ['19', '3', '27', '14', '12', '24', '0'], ['6', '3', '26', '15', '15', '22', '26'], ['18', '5', '0', '14', '15', '7', '26'], ['10', '5', '12', '22', '8', '7', '11'], ['11', '1', '18', '29', '6', '9', '26'], ['3', '23', '2', '21', '29', '15', '25'], ['5', '7', '1', '6', '15', '18', '24'], ['28', '11', '0', '6', '28', '11', '26'], ['4', '28', '9', '24', '11', '13', '2'], ['6', '2', '14', '18', '20', '21', '1'], ['20', '29', '22', '21', '11', '14', '20'], ['28', '23', '14', '17', '25', '3', '18'], ['6', '27', 
'6', '20', '19', '5', '24'], ['25', '3', '27', '22', '7', '12', '21'], ['12', '22', '8', '7', '0', '11', '8'], ['8', '25', '1', '6', '21', '23', '0']]
Traceback (most recent call last):
  File "C:\rainfall.py", line 33, in <module>
    total = yearly(matrix)
  File "C:\rainfall.py", line 28, in yearly
    total += value
TypeError: unsupported operand type(s) for +=: 'int' and 'str'

【问题讨论】:

  • 要将字符串转换为整数,请使用“int”。

标签: python


【解决方案1】:

从 CSV 中读取数字时,必须使用 map 函数将数字数组从字符串转换为 int

代替

for line in lineArray:
  matrix.append(line.split(","))

for line in lineArray:
  matrix.append(list(map(int, line.split(","))))

【讨论】:

    【解决方案2】:

    TypeError 告诉您尝试将 str 而不是 int 添加到 int。您只需包装 int(<YourString>) 即可将 str 转换为 int。

    所以在你的代码中它会像这样:

    total = 0
    for row in matrix:
      for value in row:
        total += int(value) # this line
    return total
    

    此外,当您从文件中读取数据时,数据存储在 str 而不是 int 中。

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2017-12-06
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 2011-12-04
      • 2016-09-24
      相关资源
      最近更新 更多