'ValueError:没有足够的值来解包(应为2,得到的是0)'

2024-04-27 17:34:56 发布

您现在位置: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)

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


Tags: 代码in名称网格游戏类型列表for
2条回答

您似乎有一个名为list的变量,您希望用一些列表填充它。您的代码无法工作,因为此语法用于从右侧的可发语句中提取两段数据。显然,[]是空的,因此您可以从中提取任何内容。

你可以这样做:

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个列表的列表。

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

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(列)

相关问题 更多 >