我目前正在编写一个python程序,其中涉及大量使用索引迷宫,如结构。我现在已经设置了列表,其中包含单独的嵌套列表,每个列表代表迷宫中的一行,我将它编入像迷宫[0] [1]中的第一行和第二列的网格迷宫的位置。如果我将迷宫转换为单个列表,同时记录行的长度并相应地移动列表,我的程序运行速度会更快吗?如果我使用迷宫[(0 * row_length)+1]而不是迷宫[0] [1],我会获得多少速度提升?索引嵌套列表
Q
索引嵌套列表
0
A
回答
2
不要打扰。这几乎肯定不是你的瓶颈,并且不值得头疼管理索引计算和行长度变量。
时序数据:
>>> timeit("a[1][2]", setup="a = [[0]*5 for _ in xrange(4)]")
0.09207810811146055
>>> timeit("a[1*5+2]", setup="a = [0]*5*4")
0.06518904043262097
>>> timeit("a[1*row_length+2]", setup="a = [0]*5*4; row_length=5")
0.11411290029380439
扁平列表赢得当行长度是内联的常数,但它失去了当行长度是一个全局变量。如果您试图通过拼凑清单来获得优势,那么您将浪费大量时间来管理索引,除非您非常仔细地进行操作,否则它可能会运行得更慢。不要打扰。
0
为了进一步扩大,通过运行以下:
from timeit import timeit
class slice_list(list):
def __getitem__(self, iindex):
return list.__getslice__(self, (iindex * 5), ((iindex + 1) * 5))
nested_list = \
[
["X", "X", "X", "X", "X"],
["X", " ", " ", " ", "X"],
["X", "X", "O", " ", "X"],
["X", "@", " ", " ", "X"],
["X", "X", "X", "X", "X"]
]
flat_list = \
[
"X", "X", "X", "X", "X",
"X", " ", " ", " ", "X",
"X", "X", "O", " ", "X",
"X", "@", " ", " ", "X",
"X", "X", "X", "X", "X"
]
s_list = slice_list(flat_list)
nested_setup_str = \
'''
from __main__ import nested_list
test = nested_list
'''
flat_setup_str = \
'''
from __main__ import flat_list
test = flat_list
'''
slice_setup_str = \
'''
from __main__ import s_list
test = s_list
'''
print "Flat:", timeit("test[1 * 5 + 2]", setup=flat_setup_str)
print "Nested:", timeit("test[1][2]", setup=nested_setup_str)
print "Sliced:", timeit("test[1][2]", setup=slice_setup_str)
我:
Flat: 0.1130175887
Nested: 0.182156054306
Sliced: 1.92594956774
所以,无论获得你去一个平面列表得到的,它是由试图把它当作摧毁一个嵌套列表(在上面的例子中使用类似于slice_list的东西)。
如果性能是一个问题,也许考虑一个numpy数组(尽管您可能必须创建一个数字到符号映射)。
相关问题
- 1. 嵌套列表索引
- 2. 使用ramda.js索引嵌套列表
- 3. 嵌套列表和z索引
- 4. 嵌套列表中的SASS索引
- 5. 获取嵌套列表项的索引
- 6. 如何索引嵌套列表?
- 7. 在嵌套表列创建索引
- 8. Python搜索嵌套列表
- 9. 嵌套列表中搜索
- 10. 搜索嵌套类列表
- 11. Python:嵌套列表中元素的索引列表
- 12. 使用嵌套索引列表访问列表元素
- 13. 我如何找到嵌套列表中的列表的索引
- 14. Python列表为索引的嵌套列表
- 15. 为什么嵌套列表索引与列表解析交换?
- 16. python嵌套索引
- 17. 索引索引嵌套文档
- 18. Solr嵌套文档索引
- 19. CouchBase索引嵌套元素
- 20. knockout.js嵌套循环索引
- 21. simplejson嵌套对象索引
- 22. 嵌套结构索引
- 23. 索引和嵌套联接
- 24. 嵌套列表
- 25. 嵌套列表
- 26. 嵌套列表
- 27. 嵌套列表
- 28. 嵌套列表
- 29. Python - 从满足条件的嵌套列表中获取索引
- 30. 索引在R的嵌套列表结构
也许给出你正在谈论的数据结构的摘录。 – dilbert
我的数据结构是代表墙壁,空白空间,播放器或可移动框的字符索引。这里是一个小例子:[['X','X','X','X','X'], ['X','','','','X'], ['X','X','O','','X'], ['X','@','','','X'], ['X','X ','X','X','X']] –
如果是这样,我倾向于同意给定的答案。 – dilbert