用python填充列表

2024-04-25 13:47:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列表示坐标的Python元组:

tuples = [(1,1), (0,1), (1,0), (0,0), (2,1)]

我要创建以下列表:

l = []
for t in tuples:
  l[ t[0] ][ t[1] ] = something

我得到一个索引器错误:列表索引超出范围。

我的背景是PHP,我希望在Python中可以创建以index>;0开头的列表,即填补空白,但似乎不行

我们的想法是先把名单整理好。我知道我可以用字典来做,但据我所知字典不能按键排序。 更新:我现在知道他们可以看到接受的解决方案。

编辑: 我要做的是创建一个2D数组,它将表示用元组坐标描述的矩阵,然后按顺序迭代它。 如果我使用字典,则无法保证对键的迭代顺序为->;(0,0)(0,1)(0,2)(1,0)(1,1)(1,2)(2,0)(2,1)(2,2)

有人能帮忙吗?


Tags: ingt列表forindex字典顺序错误
3条回答

你说的“但据我所知字典不能按键排序”到底是什么意思?

虽然这与“排序字典”并不完全相同,但您可以轻松地将字典转换为按键排序的列表,这似乎是您所追求的:

>>> tuples = [(1,1), (0,1), (1,0), (0,0), (2,1)]
>>> l = {}
>>> for t in tuples:
...    l[t] = "something"
>>> sorted(l) # equivalent to sorted(l.keys())
[(0, 0), (0, 1), (1, 0), (1, 1), (2, 1)]
>>> sorted(l.items()) # make a list of (key, value) tuples, and sort by key
[((0, 0), 'something'), ((0, 1), 'something'), ((1, 0), 'something'), ((1, 1), 'something'), ((2, 1), 'something')]    

(我把something变成字符串“something”只是为了让代码工作)

然而,要在您的案例中使用这个(如果我理解正确,也就是说),您仍然需要为字典中的每个“空”坐标元组填充无值或其他值)

你应该看一下这样的听写。

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]

不,不能创建有间隙的列表。但是你可以用元组键创建一个字典:

tuples = [(1,1), (0,1), (1,0), (0,0), (2,1)]
l = {}
for t in tuples:
    l[t] = something

更新: 尝试使用NumPy,它提供了对矩阵和数组的广泛操作。引用网站上可用的NumPy上的free pfd(3.4.3平面迭代器索引):“如前所述,X.Flat返回一个迭代器,它将在整个数组上迭代(以C-连续样式,最后一个索引变化最快“”。看起来像你需要的。

相关问题 更多 >