为什么在这种情况下python列表显示为空?

2024-04-25 04:14:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图打开一个文本文件使用csv模块,我有一些值,然后提取和两个单独的列表填充。在

这是示例.txt文件:

1,2
3,4
6,8
8,2
9,3

当我尝试运行此代码时,在不同的场景中有不同的输出:

^{pr2}$

在ipython中,当我引用x和y时,它输出y的空列表

对于x:

[1, 3, 6, 8, 9]

对于y:

[]

但是如果我注释掉填充x的行,那么引用y将返回相应的列表。在

with (open('A:\WorkSpace--Python\Plotter\MainSource\example.txt','r')) as egFile:
    plot=csv.reader(egFile,delimiter=',')
    '''x=[int(row[0]) for row in plots]'''
    y=[int(row[1]) for row in plots] 

输出y:

[2,4,8,2,3]

我尝试使用不同的变量名,但结果仍然相同。在


Tags: 模块文件csv代码intxt示例列表
2条回答

根据@Alex的回答,您可以使用显式循环来设置x,y值:

x = []
y = []
with (open('E:\\TEMP\\xy.csv','r')) as egFile:
    plots=csv.reader(egFile,delimiter=',')
    for row in plots:
        x.append(int(row[0]))
        y.append(int(row[1]))
print x
print y

csv.reader是一个lazy(意味着它只在需要时生成数据)迭代器,当您迭代一次它就会耗尽它,就像生成器一样。在声明x之后,它是空的。在

您可以使用list来实现它,以允许多次迭代:

plot = list(plot)

但是,如果CSV文件很大,这将占用大量内存,尽管在这种情况下它并没有真正的区别,因为您无论如何都要将所有值保存在x和{}中。在

另一种选择是:

^{pr2}$

或者

x = []
y = []
for xrow, yrow in plot:
    x.append(int(xrow))
    y.append(int(yrow))

相关问题 更多 >