我有一系列表示坐标的Python元组:
tuples = [(1,1), (0,1), (1,0), (0,0), (2,1)]
我想创建以下列表:
l = [] for t in tuples: l[ t[0] ][ t[1] ] = something
我得到一个IndexError:list index超出范围.
我的背景是在PHP中,我希望在Python中你可以创建以index> 0开头的列表,即创建间隙然后填充它们,但似乎你不能.
我们的想法是让列表在之后排序.我知道我可以用字典做到这一点,但据我所知,字典不能按键排序. 更新:我现在知道他们可以 - 看到公认的解决方案.
编辑:我想要做的是创建一个2D数组,代表用元组坐标描述的矩阵,然后按顺序迭代它.如果我使用字典,我不能保证迭代按键顺序 - >(0,0)(0,1)(0,2)(1,0)(1,1)(1,2) )(2,0)(2,1)(2,2)
有人可以帮忙吗?
不,你不能创建有差距的列表.但您可以使用元组键创建字典:
tuples = [(1,1), (0,1), (1,0), (0,0), (2,1)] l = {} for t in tuples: l[t] = something
更新: 尝试使用NumPy,它提供了基于矩阵和数组的广泛操作.引用网站上提供的NumPy上的免费pfd(3.4.3 Flat Iterator索引):"如前所述,X.flat返回一个迭代器,它将迭代整个数组(以C连续样式,最后一个索引变化最快) ".看起来像你需要的.
你应该看看类似的东西.
for t in tuples: if not l.has_key(t[0]): l[t[0]] = {} l[t[0]][t[1]] = something
但是,迭代dict与迭代列表有点不同.你将拥有keys(),values()和items()函数来帮助解决这个问题.
编辑:尝试这样的东西订购:
for x in sorted(l.keys()): for y in sorted(l[x].keys()): print l[x][y]