1

我正在尝试创建一个看起来像这样的字典n == 3

{
  0: [1, 2],
  1: [0, 2],
  2: [0, 1]
}

基本上..只是一个字典,其键映射到包含其他键整数的数组,除了它映射到的那个。我的代码:

import itertools

graph = {i: range(num_nodes) for i in range(num_nodes)}

for i in graph.keys():
    graph[i].remove(i)

我不确定为什么会抛出这个错误ValueError: list.remove(x): x not in list

经过更多研究,发现我可以在集合之间进行减法并一次完成所有操作:

graph = {i: list(set(range(num_nodes)) - set([i])) for i in range(num_nodes)}

谢谢大家!

4

3 回答 3

2

那是因为type(graph[i])is not a list,它的 type range。将其转换为列表并尝试以下操作:

[编辑:删除减法,查看 sgarza62 的评论]

import itertools    

graph = {i: list(range(num_nodes)) for i in range(num_nodes)}

for i in graph.keys():
    graph[i].remove(i)
于 2014-09-02T21:01:02.080 回答
1

如果您想在没有额外 for 循环的情况下使用 dict 理解,请尝试以下操作:

import itertools
num_nodes = 3

graph = {i: (range(num_nodes)[:i] + range(num_nodes)[i+1:]) for i in range(num_nodes)}

注意:不幸的是,列表连接是必要的,因为list.remove(x)它不会返回更新的列表,但会更改列表并不会返回任何内容。因此,range(num_nodes).remove(i-1)不能直接用于理解。

于 2014-09-02T21:11:09.340 回答
1

在编辑之前,这是一个错误的错误。

import itertools

num_nodes = 3
graph = {i: range(num_nodes) for i in range(num_nodes)}

for i in graph.keys():
    graph[i].remove(i)

print graph
# {0: [1, 2], 1: [0, 2], 2: [0, 1]}
于 2014-09-02T21:05:16.407 回答