【问题标题】:Searching for a letter within a list在列表中搜索字母
【发布时间】:2018-12-23 05:52:54
【问题描述】:

我对编码非常陌生,目前正在参加在线课程。使用 CodeHS 沙箱来制作程序,并且在这个过程中遇到了一些困难。我试图让我的程序查看这个名称列表并返回其中包含字母“E”/“e”的名称。我还希望它记录找到的名称数量并最终返回该数量。任何帮助表示赞赏,在此先感谢。到目前为止,这是我的代码:

middle_names = ["Michael", "Abdallah", "Parvati", "Sanskriti", "Piper", "Samuel", "Lee", "Meg", "Michael", "Mohamed", "Sofia", "Ahmed Hani", "Josh", "Lawrence", "Mireya", "Mingyue", "Bradley Theodore", "McKenna", "Ali"]


def search():
    if "e" in middle_names:
        print middle_names

search()

【问题讨论】:

  • 感谢大家的帮助!成功了!!

标签: python list search letters


【解决方案1】:

循环方法

您需要循环浏览列表中的每个项目。这通常通过for 循环实现:

def search(lst, k):
    for item in lst:
        if 'e' in item:
            print(item)

search(middle_names, 'e')

您可以改进这种算法的几种方法是考虑小写或大写字母,例如通过str.casefold,并使用returnyield 语句让函数给出输出。下面是一个使用生成器的示例:

def search(lst, k):
    for item in lst:
        if 'e' in item.casefold():
            yield item

for res in search(middle_names, 'e'):
    print(res)

理解

一种 Python 风格的高效方法是使用列表推导:

res = [item for item in middle_names if 'e' in item.casefold()]
print(res)

或者,如果您想要一种惰性方法,您可以使用生成器推导:

res = (item for item in middle_names if 'e' in item.casefold())
print(*res, sep='\n')

【讨论】:

    【解决方案2】:

    使用 python 的甜蜜列表推导,它将返回一个列表,其中包含所有带有“e”的名称,例如 -

    middle_name_contains_e = [i for i in middle_names if 'e' in i]
    

    正如评论中指出的那样,只需将“e”替换为“E”即可匹配大写字母 -

    middle_name_contains_e = [i for i in middle_names if 'E' in i]
    

    或者您可以像这样手动遍历列表中的所有名称 -

    def middle_name_contains_e():
        names = []
        for name in middle_names:
            if "e" in name:
                names.append(name)
        return names
    names = middle_name_contains_e()
    

    【讨论】:

    • 如果不区分大小写,请调整为[i for i in middle_names if 'e' in i or 'E' in i] :) 啊列表推导真好
    【解决方案3】:

    您也可以这样做以在一个函数中使用 e 计算计数和字母:

    def search(x):
        e_list = []
        for i in x:
            if 'e' in i:
                e_list.append(i)
        return len(e_list), e_list
    
    count,e_list = search(middle_names)
    # count = 13
    # e_list = ['Michael', 'Piper', 'Samuel', 'Lee', 'Meg', 'Michael', 'Mohamed', 'Ahmed Hani', 'Lawrence', 'Mireya', 'Mingyue', 'Bradley Theodore', 'McKenna']
    

    【讨论】:

    • 为什么我们需要一个单独的计数器?列表长度len(e_list) 应该足够了吗?
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多