从嵌套的For循环中生成2D列表

时间:2019-03-03 20:29:34

标签: python python-3.x list 2d nested-loops

因此,我有一个用于类的python项目,我们在其中模拟一维随机游动实验。因此,问题的第一部分包括我们创建一个程序,该程序将运行For循环1000次,并将初始值的“位置”升高/降低1。它还保存了位置和时间值,以便绘制为好吧。

该程序:

%matplotlib inline
import matplotlib.pyplot as plt

x = 0
n = 1000

pos = []
time = []
for i in range(0,1000):
    a = np.random.randint(low,high)

    if a == 0:
        x -= 1
    else:
        x += 1

    pos.append(x)
    time.append(i)

plt.plot(time, pos)

下一个任务是使用此程序并运行一个for循环,在该循环中我们测量5个不同的“轨迹”(基本上,我们希望一次随机行走模拟即可产生5个不同的图)

问题的具体措词是:“好极了!虽然同时绘制一组这样的代码会很棒。接下来,将您的循环代码放在一个额外的循环中,该循环中有一个轨迹计数器(例如,trj )从0到4,并将您的轨迹存储在2D列表中。然后,在下面绘制所有五个轨迹。“

这是我尝试解决的方法:

trj = [[] for i in range(5)]


x = 0
n = 1000


for j in range(5):
    pos = []
    time = []
    trj[j] = [time, pos]

    for r in range(0,1000):
        a = np.random.randint(low,high)

        if a == 0:
            x -= 1
        else:
            x += 1

        pos.append(x)
        time.append(r)

plt.plot(trj[1])

我不断收到“超出范围”错误。感谢所有帮助,因为我在概念上确实不了解2d列表(我有点理解它们包含行和列中的列表)

1 个答案:

答案 0 :(得分:0)

Matplotlib的plot函数带有2个参数;在第一个示例中,您传递了timepos-但是,在第二个示例中,您传递了一个列表([time, pos]),该列表只是一个参数,因此会出现错误

您需要将此列表扩展为2个参数-一种方法是使用*args将列表扩展为该函数的多个参数:

plt.plot(*trj[1])

或者,如果您不喜欢*args格式,则可以使用以下更容易遵循的选项:

plt.plot(trj[1][0], trj[1][1])