如何在游戏(列表)中查找元素的位置?

问题描述 投票:-2回答:3

在此游戏中,只有一个元素在(0,0)处以'o'表示,其余元素被占用。编写一个函数empty(game),该函数接收一个游戏并给出所有空白区域的位置列表。每个位置由(i,j)指定。例如,

game =  [['o', 'x', 'x'],
         ['x', 'x', 'x'],
         ['x', 'x', 'x']]

空(游戏)给出[(0,0)]


def empty_spaces(game):
    result = [0]
    num_of_rows = len(game)
    num_of_columns = len(game[0])
    for i in range(num_of_columns):
        for j in range(num_of_rows):
            if not "o":
                result += i[j]
    return result

但是,我得到的结果是[0]。非常感谢您的帮助,非常感谢!

python list search
3个回答
2
投票

类似这样的方法应该起作用:

game =  [['x', 'x', 'o'],
         ['x', 'o', 'x'],
         ['x', 'x', 'o']]

def empty_spaces(board):
    result = []

    for r_index, row in enumerate(board):
        for c_index, column in enumerate(row):
            if 'o' in column:
                result.append((r_index, c_index))

    return result

print(empty_spaces)

>>> [(0, 2), (1, 1), (2, 2)]


2
投票

问题出在语句if not 'o':上。

对于我们人类来说,很明显,在程序上下文中,我们要检查索引(i,j)处的元素是否为字符串'o'

不幸的是,Python的性质和局限性意味着我们必须明确而具体:if game[i][j] == 'o':

这个特定的错误非常令人讨厌,因为尽管表达式的一部分丢失了,但是由于称为真实性的原因,代码运行得很好。 Truthyness(及其对应的fassyness)是一种想法,即非布尔值的事物可以转换为/评估为一个。对于Python字符串,空字符串是虚假的(它们的评估结果为False),非空字符串是真实的(您知道了)。因此,代码中的if语句的计算方式如下:if not 'o': —>if not True:—> if False:。如您所知,if语句的内容将never执行。


这是我将如何重写您的代码:

game =  [['o', 'x', 'x'],
         ['x', 'x', 'x'],
         ['x', 'o', 'x']]


def empty_indexes(board):
    index_list = []
    for row_idx, row in enumerate(board):
        for col_idx, elem in enumerate(row):
            if elem == 'o': 
                index_list.append((row_idx, col_idx))
    return index_list

enumerate()是一个简单且极为有用的函数,它返回由输入中的一个元素和一个计数器组成的对,该计数器每次递增。当在列表中使用时,就像上面的代码一样,它返回对应于(索引,元素)对的内容。


2
投票

您已遍历game列表,看是否找到'o'是否有匹配项,然后将该元素坐标附加到result。我想指出的错误是if not "o"始终为true,result=[0]您不想这样做。而是简单地写result= []result= list()。代码中的result+= i[j] i不可迭代,它是整数。由于我们检查每个元素是否均等于"o",因此时间复杂度为O(rows*columns)

game =  [['o', 'o', 'x'],
         ['x', 'x', 'x'],
         ['x', 'x', 'o']]
result=[]
for i in range(len(game)):
    for j in range(len(game[i])):
        if game[i][j] == 'o':
            result.append((i,j))
print(result)

>>> [(0, 0), (0, 1), (2, 2)]
© www.soinside.com 2019 - 2024. All rights reserved.