如何检测字母" a"在函数的字符串中?

时间:2016-03-01 04:22:36

标签: python

所以这是以下问题:

编写一个给定字符串列表的函数,如果列表中至少有一个字符串以" 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

我不确定我是不对的。有人能告诉我代码是否适合这个问题吗?

如果我的编码错误,有人可以给我整个编码的更正。谢谢。

3 个答案:

答案 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