所以这是以下问题:
编写一个给定字符串列表的函数,如果列表中至少有一个字符串以" a"开头,则返回True;如果列表中没有这样的字符串,则返回False。例如,如果列表是[" bee"," cat"," ant"],则该函数返回True,而如果列表是[" bee"," cat"," bat"]函数返回False。使用标题def isA(myList):
我为代码写的是:
def isA(myList):
String=[]
for String in myList:
if ('a' in String):
return True
elif:
return False
我不确定我是不对的。有人能告诉我代码是否适合这个问题吗?
如果我的编码错误,有人可以给我整个编码的更正。谢谢。
答案 0 :(得分:5)
更简化的方法是使用Python any
,当迭代列表时,如果满足任何条件,它将几乎返回True:
def isA(myList):
return any(x.startswith('a') for x in myList)
print(isA(["bee","cat","ant"])) # True
print(isA(["bee","cat","bat"])) # False
然而,为了给你一些关于你自己的代码的输入。以下是我看到的问题:
按顺序:
您不需要声明String = []。该行在您的代码中没有任何用途。
接下来,你说你要检查' a'从你的开头开始。您想使用startswith字符串方法。
这里的逻辑是,根据您的要求,如果您发现单个案例以' a'开头,那么您可以提前退出return True
。
单独elif
是语法错误。所以,这应该消失。
最后,如果您设法完成整个循环而没有找到以' a'开头的单个单词,那么您只需返回False。
所以,完成所有这些后,您的代码如下所示:
def isA(myList):
for String in myList:
if String.startswith('a'):
return True
return False
答案 1 :(得分:1)
使用any
功能和简单的列表理解来尝试以下操作:
def isA(myList):
return any([item[0].lower() == 'a' for item in myList])
>>> isA(['bee', 'ant', 'cat'])
True
>>> isA(['bee', 'bat', 'cat'])
False
>>>
答案 2 :(得分:0)
使用函数式编程的替代解决方案
map
>>> myList = ['bee', 'ant', 'cat']
>>>
>>> myList_bools = map(lambda s: s[0] == 'a', myList)
>>> print(myList_bools)
[False, True, False]
>>>
>>> any(myList_bools)
True
一衬垫:
any(lambda s: s[0] == 'a', myList)
filter
>>> myList = ['bee', 'ant', 'cat']
>>>
>>> myList_filtered = filter(lambda s: s[0] == 'a', myList)
>>> print(myList_filtered)
<filter object at 0x7fafbbdffa20>
>>>
>>> myList_filtered_list = list(myList_filtered)
>>> print(myList_filtered_list)
['ant']
>>>
>>> len(myList_filtered_list) > 0
True
一衬垫:
len(list(filter(lambda s: s[0] == 'a', myList))) > 0