比较 Python 中子列表的索引位置
Comparing index positions of sublists in Python
我试图了解我在这两种不同的方法中遗漏了什么。在下面的代码中,我定义了一个列表列表,并以两种方式调用它。第一种方式是在打印语句中调用它作为一行,列表的索引位置用逗号分隔,第二种方式是单独打印它们。
list_of_lists = [[2, 2, 0], [2, 1, 0], [2, 1, 1]]
print(list_of_lists[0][0],[1][0],[2][0])
print('\n')
这段代码的输出是2,1,2
print(winner_is_2[0][0])
print(winner_is_2[1][0])
print(winner_is_2[2][0])
这段代码的输出是2,2,2
为什么在第一种情况下,调用会为第二组索引位置输出错误的值?
这里的用例是尝试检查列表列表中的一组索引位置是否都等于相同的值(就像你在井字游戏中看到的那样,你会检查是否所有x行或y列的值相同)
注意:我知道我可以使用列表提取来获取这些子列表中 X 位置的所有值,但我宁愿尽可能不使用该方法。
在此片段中:
list_of_lists = [[2, 2, 0], [2, 1, 0], [2, 1, 1]]
print(list_of_lists[0][0],[1][0],[2][0])
print('\n')
这实际上等同于:
list_of_lists = [[2, 2, 0], [2, 1, 0], [2, 1, 1]]
print(list_of_lists[0][0])
print([1][0])
print([2][0])
Python 将逗号分隔的输入解释为单独的数组 [1]
和 [2]
由它们的第一个值索引 [1][0]
和 [2][0]
导致它们打印为 1,2
要进一步证明这一点,请尝试更改 1 和 2 的值,然后看看您会得到什么:
list_of_lists = [[2, 2, 0], [2, 1, 0], [2, 1, 1]]
print(list_of_lists[0][0],[5555][0],[262626][0])
print('\n')
在这里你应该得到(2, 5555, 262626)
list_of_lists = [[2, 2, 0], [2, 1, 0], [2, 1, 1]]
print(list_of_lists[0][0], list_of_lists[1][0], list_of_lists[2][0])
print('\n')
这有什么问题吗?
您尝试的等效于:
print(list_of_lists[0][0], 1, 2)
因此,在进一步挖掘之后,感谢 Spencer Bard 对语法错误的解释,我能够想出完全符合我想要做的事情的代码。当我试图针对列表中特定索引位置的每个项目测试标记时,对我有用的代码如下。
def win_check(marker_list,mark):
if (marker_list[0][0] == mark and marker_list[1][0] == mark and marker_list[2][0] == mark):
print(f'Winner is player {mark}!')
下面还有很多 elif 语句来说明其余的可能性,但这是通用格式。
我试图了解我在这两种不同的方法中遗漏了什么。在下面的代码中,我定义了一个列表列表,并以两种方式调用它。第一种方式是在打印语句中调用它作为一行,列表的索引位置用逗号分隔,第二种方式是单独打印它们。
list_of_lists = [[2, 2, 0], [2, 1, 0], [2, 1, 1]]
print(list_of_lists[0][0],[1][0],[2][0])
print('\n')
这段代码的输出是2,1,2
print(winner_is_2[0][0])
print(winner_is_2[1][0])
print(winner_is_2[2][0])
这段代码的输出是2,2,2
为什么在第一种情况下,调用会为第二组索引位置输出错误的值?
这里的用例是尝试检查列表列表中的一组索引位置是否都等于相同的值(就像你在井字游戏中看到的那样,你会检查是否所有x行或y列的值相同)
注意:我知道我可以使用列表提取来获取这些子列表中 X 位置的所有值,但我宁愿尽可能不使用该方法。
在此片段中:
list_of_lists = [[2, 2, 0], [2, 1, 0], [2, 1, 1]]
print(list_of_lists[0][0],[1][0],[2][0])
print('\n')
这实际上等同于:
list_of_lists = [[2, 2, 0], [2, 1, 0], [2, 1, 1]]
print(list_of_lists[0][0])
print([1][0])
print([2][0])
Python 将逗号分隔的输入解释为单独的数组 [1]
和 [2]
由它们的第一个值索引 [1][0]
和 [2][0]
导致它们打印为 1,2
要进一步证明这一点,请尝试更改 1 和 2 的值,然后看看您会得到什么:
list_of_lists = [[2, 2, 0], [2, 1, 0], [2, 1, 1]]
print(list_of_lists[0][0],[5555][0],[262626][0])
print('\n')
在这里你应该得到(2, 5555, 262626)
list_of_lists = [[2, 2, 0], [2, 1, 0], [2, 1, 1]]
print(list_of_lists[0][0], list_of_lists[1][0], list_of_lists[2][0])
print('\n')
这有什么问题吗? 您尝试的等效于:
print(list_of_lists[0][0], 1, 2)
因此,在进一步挖掘之后,感谢 Spencer Bard 对语法错误的解释,我能够想出完全符合我想要做的事情的代码。当我试图针对列表中特定索引位置的每个项目测试标记时,对我有用的代码如下。
def win_check(marker_list,mark):
if (marker_list[0][0] == mark and marker_list[1][0] == mark and marker_list[2][0] == mark):
print(f'Winner is player {mark}!')
下面还有很多 elif 语句来说明其余的可能性,但这是通用格式。