(更新)我需要找到具有450万个状态的马尔可夫链的固定分布。这意味着我需要用450万个方程来求解线性系统。每个状态都是一个大小为6的向量。我试图将每个状态存储在一个列表中。以下是我创建所有可接受状态的部分工作。
我试图遍历一大组数字并创建一组向量。这是我的代码的简化版本:
mylist=[]
for i in range(1,4):
for j in range(1,4-i):
for k in range(0,5-i-j):
Temp=[i,j,k]
mylist.extend(Temp)
print(mylist)
mylist=[]
Temp=[]
会给我:
[1, 1, 0]
[1, 1, 1]
[1, 1, 2]
[1, 2, 0]
[1, 2, 1]
[2, 1, 0]
[2, 1, 1]
我的问题是:在Python中有更简洁,更好,更有效的方法吗?
谢谢
答案 0 :(得分:3)
如果您正在寻找可以创建相同向量的单行代码,可以在python中使用list comprehension。
示例 -
myList = [[i,j,k] for i in range(1,4) for j in range(1,4-i) for k in range(0,5-i-j)]
myList
>> [[1, 1, 0], [1, 1, 1], [1, 1, 2], [1, 2, 0], [1, 2, 1], [2, 1, 0], [2, 1, 1]]
虽然我认为这无论是更整洁还是更有效率。
虽然在使用timeit
进行一些测试后,我们可以看到列表理解可能会更快一些 -
In [1]: def foo1():
...: l = []
...: for i in range(100):
...: for j in range(100):
...: l.append([i,j])
...: return l
In [3]: def foo2():
...: return [[i,j] for i in range(100) for j in range(100)]
...:
In [4]: %timeit foo1()
100 loops, best of 3: 3.08 ms per loop
In [5]: %timeit foo2()
100 loops, best of 3: 2.16 ms per loop
In [6]: %timeit foo2()
100 loops, best of 3: 2.18 ms per loop
In [7]: %timeit foo1()
100 loops, best of 3: 3.11 ms per loop
答案 1 :(得分:1)
我完全没有通过您的列表获得您要存档的内容。 你可以得到相同的输出:
for i in range(1,4):
for j in range(1,4-i):
for k in range(0,5-i-j):
print([i,j,k])
答案 2 :(得分:0)
from itertools import product
mylist =[[i,j,k] for i,j,k in product(range(1,4),range(1,4),range(2))]