在python中编写嵌套for循环的简洁方法
(更新)我需要找到一个有450万个状态的马尔可夫链的平稳分布。这意味着我需要解一个包含450万个方程的线性系统。每个状态是一个大小为6的向量。我试图将每个状态存储在一个列表中。以下是我创建所有可受理国家努力的一部分 我试图通过一大组数字循环,并创建一组向量。以下是我的代码的简化版本:在python中编写嵌套for循环的简洁方法,python,list,for-loop,nested,Python,List,For Loop,Nested,(更新)我需要找到一个有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
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中有没有一种更整洁、更好、更高效的方法
谢谢如果您正在寻找一行代码来创建相同的向量,您可以在python中使用 范例-
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
如果您正在寻找一行代码来创建相同的向量,那么可以在python中使用 范例-
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
我完全不明白你想用你的列表归档什么。 您可以通过以下方式获得相同的输出:
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])
我完全不明白你想用你的列表归档什么。 您可以通过以下方式获得相同的输出:
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])
我投票结束这个问题,因为它属于@CoreyOgburn,如果它是来自真实项目的实际代码的话。就目前而言,它是一个假设/示例代码,这在代码评审中显然是离题的。此外,更好地适应CR并不是一个紧密的原因;若要帮助迁移问题,您需要自定义标志以引起版主的注意。请执行一次,然后将其序列化,以便下次需要时可以直接在中阅读。@wwii:谢谢;你能解释一下什么是序列化吗?我正在处理大量的数据,我完全可以使用任何提示来节省时间(特别是内存)。您可能需要进一步阐述您的问题,并描述您试图达到的效率类型。我把它理解为时间,所以我的建议是保持代码的原样,创建一次数据(喝杯茶的时候),然后将其写入光盘,以便在需要时重新读取()。它可以很容易地写成一个文本文件或文件。你还应该在问题中定义大量的数据。我投票将这个问题作为离题题来结束,因为它属于@CoreyOgburn,如果它是来自真实项目的实际代码的话。就目前而言,它是一个假设/示例代码,这在代码评审中显然是离题的。此外,更好地适应CR并不是一个紧密的原因;若要帮助迁移问题,您需要自定义标志以引起版主的注意。请执行一次,然后将其序列化,以便下次需要时可以直接在中阅读。@wwii:谢谢;你能解释一下什么是序列化吗?我正在处理大量的数据,我完全可以使用任何提示来节省时间(特别是内存)。您可能需要进一步阐述您的问题,并描述您试图达到的效率类型。我把它理解为时间,所以我的建议是保持代码的原样,创建一次数据(喝杯茶的时候),然后将其写入光盘,以便在需要时重新读取()。它可以很容易地写成一个文本文件或文件。您还应该在问题中定义大量数据。