Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将数据读入两个单独的列表_Python 3.x - Fatal编程技术网

Python 3.x 将数据读入两个单独的列表

Python 3.x 将数据读入两个单独的列表,python-3.x,Python 3.x,我刚开始学习python,想知道如何将一组点读入两个不同的列表(比如p和q) 我想要像这样的东西 p=[1.0,2.0,6.0,14.0]和q=[4.0,3.0,5.0,3.0]最简单的方法是: lines = open('your_file.txt').read().splitlines() p = [line.split(',')[0] for line in lines] q = [line.split(',')[1] for line in lines] 尽管语法可读性很高,但不建议

我刚开始学习python,想知道如何将一组点读入两个不同的列表(比如p和q)

我想要像这样的东西


p=[1.0,2.0,6.0,14.0]
q=[4.0,3.0,5.0,3.0]
最简单的方法是:

lines =  open('your_file.txt').read().splitlines()
p = [line.split(',')[0] for line in lines]
q = [line.split(',')[1] for line in lines]
尽管语法可读性很高,但不建议像这样进行迭代,因为这样做效率不高。一次过在线路上循环将是一个良好的开端:

for line in open('your_file.txt').read().splitlines():
    p.append(line.split(',')[0])
    q.append(line.split(',')[1])
但是,如果您想使用可读性较差但效率较高且可扩展的oneliner,请参阅:

p,q = map(list,zip(*[line.split(',') for line in open('your_file.txt').read().splitlines()]))
计时:(将您的文件放大到其数据的30倍)
  • 返回:
    151µs±19µs/循环(7次运行的平均值±标准偏差,每个循环10000次)

    二,

    返回:
    149µs±47.1µs/循环(7次运行的平均值±标准偏差,每个循环10000次)

    三,

    返回:
    105µs±2.54µs/循环(7次运行的平均值±标准偏差,每个循环10000次)

    虽然numpy和其他库可能是一个更快的选择,如果您有很多操作,但在像这样的简单情况下,它们将花费您更多,而不是任何效率,因为它们不打算用于这样简单的任务:

    %%timeit
    f = np.loadtxt('your_file.txt', delimiter=',')
    p, q = f[:,0], f[:,1] 
    p,q
    

    返回:
    920µs±38.9µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

    这里是一种替代单线解决方案。
    .T
    转换由
    np.loadtxt
    返回的数组,以便您可以将其解压为两个(或txt文件中的任意列数)

    将numpy导入为np
    p、 q=np.loadtxt('data.txt',分隔符=',').T
    
    数据文件定义为

    1.0,4.0
    2.0,3.0
    6.0,5.0
    14.0,3.0
    
    编辑

    我最近在中发现,您还可以将
    unpack
    关键字设置为
    True
    ,以便以更简洁的方式执行相同的操作:

    p,q=np.loadtxt('data.txt',分隔符=',',unpack=True)
    
    数据表的数据结构是什么?它是数据帧吗?或numpy数组?第二个列表中的每个数字后面都会出现一个“\n”。有没有办法解决这些问题?事实上,这是做同样事情最昂贵的方法,而不是最简单的方法。为什么在读取完整数据后需要对其进行两次迭代?这种解决方案效率很低。如果要读取行,则只需一次性将值附加到p和q上即可。另外,由于变量名中存在错误,代码无法运行。@amitmishra请不要将效率低下且有错误的答案标记为正确答案。其他寻找类似问题的SO用户最终得到了糟糕的解决方案,SO的整体质量受到影响。感谢Akshey指出!我更新了我的答案!
    %%timeit
    for line in open('your_file.txt').read().splitlines():
        p.append(line.split(',')[0])
        q.append(line.split(',')[1])
    
    %%timeit
    p,q = map(list,zip(*[line.split(',') for line in open('your_file.txt').read().splitlines()]))
    
    %%timeit
    f = np.loadtxt('your_file.txt', delimiter=',')
    p, q = f[:,0], f[:,1] 
    p,q
    
    1.0,4.0
    2.0,3.0
    6.0,5.0
    14.0,3.0