我有一个从 CSV 文件中读取的四元组列表,其元素的形式为 t =(id, e1, e2, label)。该列表应包含每个 t 元组:(someID, e2,e1, 3-label)。如果没有,我需要添加到列表中。我编写了以下代码并将我的列表缩小到只有 50 个元组。import nltkimport csv#file stringfs = "mydataset.csv"with open(fs) as infile: rows = list(csv.reader(infile))[950:1000] size = len(rows) print("initial size =", size) newSize = size firstId = int(rows[1][0]) lastId = int(rows[size-1][0]) for i in range(size): if i % 500 == 0: rint("program progression = ", i*100/size, '%', sep ='') tempRow = rows[i] if tempRow[-1] == '1' or tempRow[-1] == '2': for j in range(i+1, size): # print("j = ", j) if tempRow[1] == rows[j][2] and tempRow[2] == rows[j][1]: if int(tempRow[3]) == 3-int(rows[j][3]): break else: print("error in row: ", i) else: if j == size -1: lastId +=1 print(tempRow[-1]) rows += rows +[[ str(lastId), tempRow[2], tempRow[1], str(3-int(tempRow[3])) ]] newSize +=1 print("newSize", newSize) print("END")当我运行它时,它会耗尽我的内存。它使用超过8GB的内存?请问这是怎么回事?我的 CSC 文件只有 7200 行 4 列。我真的不知道我还能做什么。
2 回答
万千封印
TA贡献1891条经验 获得超3个赞
不知道,但这条线看起来很可疑:
rows += rows +[[ str(lastId), tempRow[2], tempRow[1], str(3-int(tempRow[3])) ]]
我无法猜测您在这里尝试做什么,但是这条线不太可能实现您的意图。这使每次执行的长度增加了一倍rows多,并且您的代码中似乎没有任何内容可以减少rows.
使理解要点变得非常简单:
>>> rows = [1]
>>> for i in range(20):
... rows += rows
... print(i, len(rows))
显示:
0 2
1 4
2 8
3 16
4 32
5 64
6 128
7 256
8 512
9 1024
10 2048
11 4096
12 8192
13 16384
14 32768
15 65536
16 131072
17 262144
18 524288
19 1048576
皈依舞
TA贡献1851条经验 获得超3个赞
非常感谢!你说对了。我不得不做删除+!
rows = rows +[[ str(lastId), tempRow[2], tempRow[1], str(3-int(tempRow[3])) ]]
添加回答
举报
0/150
提交
取消