我试图编写一个函数来确定列表列表中某个行和列是否存在字母。
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
这是我到目前为止的代码:
nil
编辑:我在函数外返回错误返回True并且不确定我的函数是否正常工作
答案 0 :(得分:1)
这里有两个问题。
首先,你不必要地循环;您提供列表的索引,因此您只需要检查包含这些索引的值是否包含在字符串for(auto&& x:y)
中。不需要遍历每个元素只是为了检查一个元素;索引列表A
。
其次,lst
将始终失败(除非col == A
)。您应该检查col = 'ABCD..yz'
是否包含A
col
运算符的in
时比较它们的值。
简而言之,您可以将功能更改为:
def letter_on_spot(row,col,lst):
A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
return lst[row][col] in A
根据给定索引的内容得到想要的结果 - True
/ False
。
理想情况下,应执行一些错误检查,以便现在允许导致IndexError
s的索引;玩这些清单' 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]
的长度来检查边界是否可接受。< / p>
答案 1 :(得分:0)
您可以使用索引来访问列表元素:
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()
。
答案 2 :(得分:0)
我不确定您的代码到底出了什么问题,但更短的替代方法如下:
def letter_on_spot(row,col,lst):
return lst2[row][col].isalpha()
答案 3 :(得分:0)
letter_on_spot(row,col,lst)采用两个整数(希望)和一个列表作为输入
让我们逐步介绍:
for row in lst:
与lst
中每个较小的列表相同for col in lst:
与lst中每个较小的列表相同 这是你的第一个问题;我们想要通过行的元素,而不是lst
if col == A:
假设我们修复了上述问题,我们是否检查col是否与A相同,还是我们检查col是否 A?
我们可以访问lst的元素并检查它是否包含以下字母:
if lst[row][col] in A:
return True
else:
return False