'ValueError:没有足够的值来解包(预期2,得到0)'

时间:2016-11-20 17:07:34

标签: python

我试图在python中使用for循环创建列表列表。我的计划是使用两个独立的循环;一个循环创建大列表以放入小列表,另一个循环创建小列表并将它们附加到大列表。

这是用于制作“战舰”型游戏,其中有10x10网格。

这是我遇到困难的代码块:

for i in range(0,10):
    (newlist,(i))=[]

此特定代码要完成的唯一任务是创建10个新列表,每个列表具有不同的名称。例如,循环的第一个循环将创建list0,第二个循环list1,依此类推,直至list9

理论上,我认为这段代码没有错。它也可以在不是创建新列表时使用,而是将字符串放入新变量中。

每当我运行程序时,我都会收到错误

ValueError: not enough values to unpack (expected 2, got 0)

我不知道为什么会这样,如果有人能帮助我,我将非常感激。

2 个答案:

答案 0 :(得分:1)

您似乎有一个名为list的变量,您希望使用某些列表填充该变量。您的代码不起作用,因为此语法用于从右侧的utterable中提取两个数据。显然,[]为空,因此您可以从中提取 no

你可以这样做:

your_list = [list() for x in range(9)] 

请注意,您不应该调用变量list,因为存在一个具有相同名称的内置函数来构造一个空列表。现在变量使得内置无法访问。

编辑: 如果您需要10个列表列表:

your_list = [[[] for x in range(9)] for y in range(10)]

然后,your_list将是一个包含10个列表列表的列表。

答案 1 :(得分:0)

使用子列表更好地创建列表,因为以后更容易使用,

all_lists = []
for i in range(10):
    all_lists.append([])

或更短

all_lists = [ [] for i in range(10) ]

现在您可以使用索引访问列表,即

all_lists[0]

最终创建字典 - 然后您可以使用数字或字符串作为索引

all_lists = {}
for i in range(10):
    all_lists[i] = []  # first version
    # or 
    all_lists[str(i)] = [] # second version

或更短

all_lists = { i:[] for i in range(10) } # first version
all_lists = { str(i):[] for i in range(10) } # first version

现在您可以使用数字或字符串访问列表,即

all_lists[0]   # first version
# or 
all_lists["0"] # second version

编辑以创建10x10网格,您可以使用

grid = [ [None]*10 for _ in range(10) ]

您可以使用不同的值代替None作为默认值。

要获得位置(x,y),您可以使用

grid[y][x]

首先是y(行),第二个是x(列)