如标题所示,我一直在尝试从文件中读取文本,将其转换为 int 并将其存储在列表中。我的文本文件如下所示:
1,2
3,4
5,6
我想读取这个文件,将每对数字放入一个列表 m 中,然后将这些列表存储在一个更大的列表 lis 中。这是我的尝试:
def read_file():
lis = []
m = [0,0]
with open("data.txt") as f:
for line in f:
m[0], m[1] = line.split(",") # assign to list m
m[0] = int(m[0]) # cut off '\n' and for later use
m[1] = int(m[1])
lis.append(m) # store in lis
print lis
我希望 lis 是这样的:
[[1, 2], [3, 4], [5, 6]]
但相反,它是:
[[5, 6], [5, 6], [5, 6]]
我试过 insert 而不是 append 但似乎这不是它有问题的地方。我需要一些帮助 - 提前谢谢你!
请您参考如下方法:
您在循环的每次迭代中重复使用相同的列表 m,每次都覆盖在前一次迭代中设置的值。最后,lis 包含对同一个列表的许多引用。
相反,在循环中为m整体分配一个新值:
for line in f:
m = [0,0]
m[0], m[1] = line.split(",")
m[0] = int(m[0])
m[1] = int(m[1])
lis.append(m)
或更短:
for line in f:
m = line.split(",")
m[0] = int(m[0])
m[1] = int(m[1])
lis.append(m)
或者更短,使用 map :
for line in f:
m = list(map(int, line.split(",")))
lis.append(m)
或者更短,使用列表理解:
lis = [list(map(int, line.split(","))) for line in f]
