Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环列表给定元组形式的索引列表_Python_List_Tuples - Fatal编程技术网

Python 循环列表给定元组形式的索引列表

Python 循环列表给定元组形式的索引列表,python,list,tuples,Python,List,Tuples,我有一个元组列表,比如 a = [(1, 2), (2, 2), (3, 2)] 此列表的长度将有所不同。顺序也可以颠倒,例如: a = [(3, 2), (2, 2), (1, 2)] 我还有一个列表,如: b = [['0', '0', '0'], ['0', '0', '0'], ['0', '0', '0'], ['0', '0', '0']] 现在,我想循环查看此列表并修改具有索引的项: b[3][2] b[2][2] b[1][2] 因此,索引依赖于a。我试过这个: for

我有一个元组列表,比如

a = [(1, 2), (2, 2), (3, 2)]
此列表的长度将有所不同。顺序也可以颠倒,例如:

a = [(3, 2), (2, 2), (1, 2)]
我还有一个列表,如:

b = [['0', '0', '0'], ['0', '0', '0'], ['0', '0', '0'], ['0', '0', '0']]
现在,我想循环查看此列表并修改具有索引的项:

b[3][2]
b[2][2]
b[1][2]
因此,索引依赖于a。我试过这个:

for item in indexes_list:
    b[item[0]][item[1]] = '1'
但这会为我修改整个最后一列(我只想用a中给出的索引修改最后一列的最后3项)。实现这一目标的最佳方式是什么

编辑: 谢谢你的回复,但它们对我来说不起作用。我两个都试过了,同样的事情发生了。我在索引列表上也犯了这个错误(这是一个打字错误),因为我试图简化这个问题。我应该进一步阐述

列表列表用于某种类型的tic-tac趾板。我必须测试用户输入的动作是否会夹住对手的棋子。它不必是一个3x3的棋盘,因此长距离移动是可能的,这样可以将多个对手棋子夹在中间。如果该动作确实夹住了对手棋子,则该对手棋子将被删除,并由用户棋子替换

当我尝试这两种方法时,它会在第一次遍历for循环后快速对整个列执行此操作(通过放置断点并进行调试,检测到这一点)。以下是我的程序代码:

    for i, j in (indexes[0])[:len(y_p.rstrip('.'))]:
            print item
            board[i][j] = user
            print board
我使用print语句查看调试时发生的情况。User是一个变量,它保存用户工件的str值。rstrip方法用于检测移动的位置

默认情况下,板是:

[['.', '.', '.', '.', '.'], ['.', 'X', 'O', '.', '.'], ['.', 'O', 'X', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.']]
y\p打印

'.OX.' # board[3][1] + board[2][1] + board[1][1] + board[0][1]
索引[0]打印

[(3, 1), (2, 1), (1, 1), (0, 1)]
但我只想为你做这件事

[(3, 1), (2, 1), (1, 1)]

因为线路板[0][1]坐标定义了一个空白(无效)。此列表中的第一个坐标板[3][1]是用户希望移动的位置。棋盘[2][1]是对手棋子,棋盘[1][1]是用户棋子。因此,它应该转动由坐标定义的工件

[(3, 1), (2, 1), (1, 1)]
到用户的作品。但它会对这些坐标进行转换(请注意,这是一个5x5板)

因此,即使board[4][1]不在初始索引列表中,也会被修改。执行后,电路板变为:

[['.', 'X', '.', '.', '.'], ['.', 'X', 'O', '.', '.'], ['.', 'O', 'X', '.', '.'], ['.', 'X', '.', '.', '.'], ['.', 'X', '.', '.', '.']]

哪个不正确(第一行和最后一行的“X”不应该在那里)

一个问题是,您的索引列表被称为
a
,但您指的是
索引列表

修复此错误,它将正常工作:

结果:

[['0', '0', '0'], ['0', '0', '1'], ['0', '0', '1'], ['0', '0', '1']]

注意:在你说“但是我试过了,它对我不起作用”之前,请仔细阅读代码,特别注意
b
是如何构造的。以下非常相似的备选方案不起作用,因为它们创建了一个包含4个对同一列表的引用的列表

错误的做法:

另一种错误的做法是:


值得一提的是,您可以对uu.范围内(4)]执行
b=[[0,0,0]
“因为板[0][1]坐标定义了一个空白(无效)。”您知道python列表从0开始索引吗?索引0不是无效的。你说无效是什么意思?顺便问一下,你似乎在描述奥赛罗/弗雷西的规则。在你的问题中提及该游戏的名称可能是一个好主意,这样了解该游戏的人就可以立即理解你的问题,而不必阅读你试图解释它的长文本。此外,您还可以使用搜索引擎查找一个用图表解释规则的页面,并链接到该页面。如果有图表的话,你会更容易理解你想做什么。我的意思是,在游戏中使用for循环来拆分元组而不是依赖丑陋的索引时,+1是无效的:)
indexes_list = [(3, 2), (2, 2), (1, 2)]
b = [['0', '0', '0'], ['0', '0', '0'], ['0', '0', '0'], ['0', '0', '0']]

for item in indexes_list:
    b[item[0]][item[1]] = '1'

print b
[['0', '0', '0'], ['0', '0', '1'], ['0', '0', '1'], ['0', '0', '1']]
bb = ['0', '0', '0']
b = [bb, bb, bb, bb]          # Wrong!!!
b = [['0', '0', '0']] * 4     # Wrong!!!
a = [(1, 2), (2, 2), (3, 2)]
b = [['0', '0', '0'], ['0', '0', '0'], ['0', '0', '0'], ['0', '0', '0']]
for i, j in a:
    b[i][j] = '1'

print b
[['0', '0', '0'], ['0', '0', '1'], ['0', '0', '1'], ['0', '0', '1']]