如何在Python中将二维字符串列表转换为二维整数列表

tquggr8v  于 2022-11-21  发布在  Python
关注(0)|答案(2)|浏览(178)

我写了下面的代码来读取一个csv文件到一个多维列表中,这个多维列表工作正常。当我创建一个函数来计算二维列表的总数时,问题就出现了。这是因为二维列表中的数字是字符串形式的。
[['0','0','30','2','21','13','23'],.....,['8','25','1','6','21','23','0']]。
将字符串元素转换为二维列表中的整数的最简单方法是什么?
[[0第一个字符是“0”,第二个字符是“1”,第三个字符是“0”,第四个字符是“1”,第五个字符是“2”,第六个字符是“1”,第七个字符是“2”,第八个字符是“1”,第九个字符是“2”,第八个字符是“1”,第九个字符是“2”。

目前为止我的代码

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))

csv文件

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'
xienkqul

xienkqul1#

TypeError告诉您尝试将一个str而不是int添加到int中。您可以通过将int()环绕它来将str转换为int。
因此,在您的代码中,它将如下所示:

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

同样,当你从一个文件中读取数据时,数据存储在str而不是int中。

a64a0gku

a64a0gku2#

从CSV阅读数字时,必须使用map函数将数字数组从string转换为int
替换

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

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

相关问题