如何在startswith方法上循环

问题描述

我需要检查输入的第一个单词是否在我的列表中

name = input("type your name: ")
    
if name.startswith("Tim") or name.startswith("Anna") or name.startswith("Noah") or name.startswith("Justin"):
        print('correct')
else:
     print('false')

我需要以更好的方式编写它,例如:

myList = ['Tim','Anna','Noah','Justin']
name = input("type your name: ") 
if name.startswith(*any name in my list*):
    print('correct')

解决方法

使用列表解析任意关键字:

myList = ['Tim','Anna','Noah','Justin']
name = input("type your name: ")
if any([name.startswith(item) for item in myList]):
    print('correct')
else:
    print('false')

if 块可以从字面上解释为: 如果 namemyList 中的任何项目开头,则打印“正确”

,

startswith already supports this natively,just pass it a tuple as the prefix argument,rather than a single str

if name.startswith(("Tim","Anna","Noah","Justin")):

如果它以tuple的任何一个元素开头都是真的,而如果tuple是这种情况下的文字,它是在编译时生成并缓存的,所以性能很荒谬好的。在引擎盖下,它只是一个接一个地循环并在它被击中时短路,但您不必自己编写循环。