gpt4 book ai didi

python - 在 Python 中从 csv 阅读器复制列表

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:09 24 4
gpt4 key购买 nike

这是我的名为“test.csv”的 csv 文件:

aaa,,
ccc,ddd,
,eee,

这是我的代码:

import csv

with open('test.csv', 'rt') as f:
a = list(csv.reader(f))
r = a[:]

for row in r:
for index in range(3):
if row[index] == '':
row[index] = 'xxx'

print(r)
print(a)

结果:

[['aaa','xxx','xxx'],['ccc','ddd','xxx'],['xxx','eee','xxx]]
[['aaa','xxx','xxx'],['ccc','ddd','xxx'],['xxx','eee','xxx]]

我只想更改列表'r'中的内容,但是为什么列表'a'没有保留原来的内容[['aaa','',''],['ccc' ,'ddd',''],['','eee','']]?

最佳答案

发生这种情况的原因是维护了对内部列表的相同引用。让我们把它当作整数来代替:如果您有列表 a = [1, 2, 3],当您执行 b =一个[:]。您的示例就是这种情况。该列表存储指向其他列表的指针。如果您只是复制列表,您将获得相同的指针并修改相同的基础列表,如下所示:

In [14]: a = [[1,2,3],[4,5,6],[7,8,9]]
In [15]: b = a[:]
In [16]: id(a)
Out[16]: 4499634512
In [17]: id(b)
Out[17]: 4499967296
In [18]: id(a[0])
Out[18]: 4499909664
In [19]: id(b[0])
Out[19]: 4499909664

请注意,虽然 id(a)id(b) 不同,但 id(a[0]) id(b[0]) 是一样的。执行 b = a[:] 会创建列表的浅拷贝。您需要制作一个深拷贝。这可以通过 copy 库的 deepcopy 函数来完成。

In [20]: from copy import deepcopy
In [21]: c = deepcopy(a)
In [22]: id(c[0])
Out[22]: 4500008112
In [23]: id(a[0])
Out[23]: 4499909664
In [24]: a[0][0] = 42
In [25]: a
Out[25]: [[42, 2, 3], [4, 5, 6], [7, 8, 9]]
In [26]: c
Out[26]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

希望这对您有所帮助!

关于python - 在 Python 中从 csv 阅读器复制列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44590789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com