如何列出单个值?

时间:2015-10-16 09:00:23

标签: python

我想绘制x_list和t_list,两者都必须具有相同的第一维,现在我的t值只是一个值。如果例如t = 4且dt = 0.01,我希望t_list成为从零到t = 4的值的列表,步骤dt = 0.01。它应该与要绘制的x_list具有相同的长度。另外,如何让x_list获取每dt = 0.01的值?我在代码中提出了我的问题:

def simulation(dt,t,temp,eta,x,v):

    add_dt=dt
    x_list=[]
    t_list=[]

    sigma=math.sqrt((2*temp*eta)/dt)

#Can I use this? This doesn't give right plotted function I think.
    #while dt<t:
        #t_list.append(dt)
        #x_list.append(brownian(x,v,dt,sigma,eta))
        #dt+=add_dt

#This works, but I would like the x_list to be updated every dt=0.01
    for i in range(0,int(t)):
        x_list.append(brownian(x,v,dt,sigma,eta))

 #This is what I want in the end:
    plt.plot(t_list,x_list)

4 个答案:

答案 0 :(得分:3)

这将检查theline[0]是否等于x。如果是,请返回True

theline[0] == x

这会将x定义为theline[0]

x = theline[0]

并且...... f.readline()只会读取一行行,但f.readlines()可以将整个文件读入列表并按行分割。

所以你的程序应该是这样的:

def parameter():
    f = open('parameters.txt','r')
    theline = f.readlines()
    x = theline[0]
    v = theline[1]
    dt = theline[2]
    f.close()

答案 1 :(得分:1)

您正在读取文件,因此如果您想将该行的某些数据放入x,v或dt中,您应该像这样使用它:

x = theline[0]
v = theline[1]
dt = theline[2]

在这种情况下,您一次只能使用一个字符。 请加入parameters.txt的样本

答案 2 :(得分:0)

您的文件格式是什么?一行中的一个值或一行上的所有值?该值的数字格式是什么?

您的theline变量可以看作是字符数组,因此您的当前代码会使用第一个值覆盖您的本地变量xvdt从文件中读取的每一行的字符。很确定,这不是你想要的。

无论如何,你不能修改外部变量,所以你的函数应该返回从文件中读取的值。

答案 3 :(得分:0)

如果您使用值替换parameters.txt输入文件的最后一行上的表达式,请将其作为其内容:

0
0
.001

你可以这样做:

import ast

def get_parameters(filename):
    with open(filename, 'r') as f:
        return [float(ast.literal_eval(next(f).strip())) for _ in range(3)]


position, velocity, dt = get_parameters('parameters.txt')
print('position: {}, velocity: {}, dt: {}'.format(position, velocity, dt))

输出:

position: 0.0, velocity: 0.0, dt: 0.001

要允许1/1000这样的表达式,您可以使用内置的eval()函数而不是ast.literal_eval(),因为前者评估任意Python表达式。然而,由于恶意代码可能被放入输入文件并被执行,因此它被认为是非常不安全的。