名单上这个位置有字母吗?

2024-06-07 12:05:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个函数来确定一个字母是否出现在列表列表的某一行和某一列上。你知道吗

#Input:

lst2 = [['.', 'W', 'W', 'E', 'E'],
        ['.', '.', '.', '.', 'f'],
        ['A', 'A', 'A', '.', 'f']]

#Output: is_space_occupied(0, 1, lst2) should return True because 'W' is present on that spot 
        while is_space_occupied(1, 1, lst2) should return False because '.' is present on 
        that spot and not a letter.

这是我目前掌握的代码:

def letter_on_spot(row,col,lst):
A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
for row in lst:
    for col in lst:
        if col == A:
            return True
        else:
            return False

编辑:我在函数外部得到return作为return True的一个错误,并且不确定我的函数是否正常工作


Tags: 函数true列表returnisoncolspace
3条回答

可以使用索引访问列表元素:

x = [10, 11, 12, 13]
x[1] # => 11

对于列表列表也同样适用:

lst2 = [['.', 'W', 'W', 'E', 'E'],
        ['.', '.', '.', '.', 'f'],
        ]
lst2[2]    # => ['A', 'A', 'A', '.', 'f']
lst2[2][1] # => 'A' 

现在,你需要做的就是检查那里的符号是否有一个字符。Python为此提供了str.isalpha()

lst2[0][1].isalpha() # => True
lst2[1][1].isalpha() # => False

请注意,str.isalpha()还将为包含多个字符的字符串返回True(例如"hello".isalpha()返回True)。如果有问题,只需检查字符串的长度,您可以使用len()获得该长度。你知道吗

这里有两个问题。你知道吗

首先,循环是不必要的;您提供了列表的索引,因此您只需要检查带有这些索引的值是否包含在字符串A中。不需要遍历每个元素,只需检查一个;索引列表lst。你知道吗

其次,col == A总是会失败(除非col = 'ABCD..yz')。当您应该用in运算符检查A是否包含col时,可以比较它们的值。你知道吗

简而言之,您可以将函数更改为:

def letter_on_spot(row,col,lst):
    A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
    return lst[row][col] in A

并根据给定索引的内容得到想要的结果True/False。你知道吗

理想情况下,应该执行一些错误检查,以便现在允许索引产生IndexError;为此,可以使用列表len,类似这样:

def letter_on_spot(row,col,lst):
    A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
    if row >= len(lst) or col >= len(lst[row]): 
        return False    
    return lst[row][col] in A

其中,在尝试访问lst之前,通过测试列表lst的长度和子列表lst[row]的长度来检查边界是否可接受。你知道吗

我不确定您的代码到底出了什么问题,但下面是一个较短的替代方案:

def letter_on_spot(row,col,lst):
    return lst2[row][col].isalpha()

相关问题 更多 >

    热门问题