比较来自世界各地的卖家的域名和 IT 服务价格

填写列表B. python

我有一些元组 Python, 代表坐标:


tuples = [/1,1/, /0,1/, /1,0/, /0,0/, /2,1/]


我想创建以下列表:


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


我得到了 IndexError: 列出索引超出范围。

我的背景是 PHP, 我期待的 Python 您可以创建以索引开头的列表。 > 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


更新:

尝试使用
http://numpy.scipy.org/
, 它提供了矩阵和阵列的各种操作。 引用免费 pfd on NumPy, 现场提供 /3.4.3 Flat Iterator indexing/:

"如前面提到的, X.flat 返回将整理整个数组的迭代器 /以C-Trowsy款式更快地更换了最新索引"

. 看起来这就是你需要的。

冰洋

赞同来自:

你必须看起来像这样的东西。


for t in tuples:
if not l.has_key/t[0]/:
l[t[0]] = {}
l[t[0]][t[1]] = something


但是,关于对听写的迭代略有不同于列表中的迭代。 这将有助于您功能。 keys//, values// 和 items//.

EDIT: 尝试任何类似订单的东西:


for x in sorted/l.keys///:
for y in sorted/l[x].keys///:
print l[x][y]

风见雨下

赞同来自:

您创建一维列表。
l

您希望将其用作二维列表。
这就是你得到索引错误的原因。

您有以下选项:
创建地图并使用元组 t 作为索引:


l = {}
l[t] = something


你会收到参赛作品 l 作为:


{/1, 1/: something}


如果您需要传统的阵列结构,我会建议您查看
http://www.numpy.org/
. 通过 numpy 您将获得具有索引​​的N维数组 "traditional".

正如我所提到的那样,使用 numpy,

通过 numpy 您可以创建一个填充零,单位或的二维数组 ...
您可以填充任何理想的索引值。 [x, y] 在您的要求。
当然,您可以将行和列或整个数组整理为列表。

快网

赞同来自:

如果您知道手中的大小,您可以列出这样的列表。


>>> x = 3
>>> y = 3
>>> l = [[None] * x for i in range/y/]
>>> l
[[None, None, None], [None, None, None], [None, None, None]]


您可以重复您最初提供的方式。

诸葛浮云

赞同来自:

扩张反应
https://coderoad.ru/696874/
,


tuples = [/1,1/, /0,1/, /1,0/, /0,0/, /2,1/]
x = max/tuples, key = lambda z : z[0]/[0] + 1
y = max/tuples, key = lambda z : z[1]/[1] + 1
l = [[None] * y for i in range/x/]


然后你可以做任何你想做的事。

小姐请别说爱

赞同来自:

你究竟是什么意思 "但是,据我所知,字典不能按键排序"?

虽然它与之完全相同 "排序的字典", 你

你可以

易于将字典变为列表,按键排序,似乎需要:


>>> 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" 只是强迫代码工作/

但是,为您的案例使用它。 /如果我正确地了解他/, 您仍然需要将字典填写到值 None 或者每个坐标覆盖范围的其他东西 "empty"/

二哥

赞同来自:

如前所述,您无法使用空格编译列表,词典可以是此处的最佳选择。 诀窍是确保
l[t[0]]

当你把东西放到位置时
t[1]

. 为此,我会使用
http://docs.python.org/library ... dict:
.


import collections
tuples = [/1,1/, /0,1/, /1,0/, /0,0/, /2,1/]
l = collections.defaultdict/dict/
for t in tuples:
l[t[0]][t[1]] = something


只要
l

是一个 defaultdict, 如果一个
l[t[0]]

不存在,它会为您创造一个空的问题
something

到位
t[1]

.

注意:最终这与答案相同 @unwesen's, 没有轻微的无聊手动检查内部区域的存在。 在一个并行答案中描述它。

小明明

赞同来自:

决定 dict, 可能最好适合大多数目的。 对于您的问题,通常是键 , 你准备好了

坐标空间

, 而不是钥匙 dict, 就像您的列表列表一样。 使用 .get, 您可以指定空单元格或使用的默认值 "
collections.defaultdict

", 在创建期间确定默认值 dict. 如..


for y in range/10/:
for x in range/10/:
value = mydict.get//x,y/, some_default_value/
# or just "value = mydict[x,y]" if used defaultdict


如果您真的需要一个真实的列表,您可以直接构建它,如下所示:


max_x, max_y = map/max, zip/*tuples//
l=[[something if /x,y/ in tuples else 0 for y in range/max_y+1/]
for x in xrange/max_x+1/]


如果元组列表很可能是长的,那么为了绩效考虑,您可以使用搜索套件,以来 "
/x,y/ in tuples

" 执行列表扫描,而不是快速搜索 hash. 即将第二个字符串更改为:


tuple_set = set/tuples/
l=[[something if /x,y/ in tuple_set else 0 for y in range/max_y+1/]
for x in xrange/max_x+1/]

小姐请别说爱

赞同来自:

我认为你只宣布一维列表。

我想你宣布它


l = [][]


编辑

: 这是一个语法错误


>>> l = [][]
File "<stdin>", line 1
l = [][]
^
SyntaxError: invalid syntax
&gt;&gt;&gt;


</stdin>

要回复问题请先登录注册