有没有更短的方法来编写这段代码?
lst = ['Ellie', 'Steve', 'Sam', 'Owen', 'Gavin']
for name in lst:
if 'A' in name:
print(name)
if 'B' in name:
print(name)
if 'C' in name:
print(name)
if 'D' in name:
print(name)
if 'E' in name:
print(name)
if 'F' in name:
print(name)
if 'G' in name:
print(name)
if 'H' in name:
print(name)
if 'I' in name:
print(name)
if 'J' in name:
print(name)
if 'K' in name:
print(name)
if 'L' in name:
print(name)
if 'M' in name:
print(name)
基本上我要做的是打印列表中以字母A到M开头的每个名字
答案 0 :(得分:5)
如果您要检查初始字符是否在A-M中,那么您可以使用简单的if语句:
if name[0] in "ABCDEFGHIJKLM":
print(name)
答案 1 :(得分:1)
使用非常简单的正则表达式:
import re
lst = ['Ellie', 'Steve', 'Sam', 'Owen', 'Gavin']
for name in lst:
if re.search('^[A-M]', name):
print(name)
另外,请注意您的代码无法正常工作,因为它会接受任何位置的字母,而不仅仅是第一个字母。
答案 2 :(得分:0)
lst = ["Jonny","Samantha","Frank","Turtle","Robbie","Samuel Jackson"]
print "\n".join(filter(set("ABCDEFGHIJKLM").intersection,lst))
是一种方法
import functools
lst = ["Jonny","Samantha","Frank","Turtle","Robbie","Samuel Jackson"]
print "\n".join(filter(functools.partial(re.match,"[A-M]"),lst))
是确保其唯一第一个字母匹配的另一种方式
答案 3 :(得分:0)
我不确定这个问题值得回答,但是
lst = ['Ellie','Steve','Sam','Owen', 'Gavin', 'Bert', 'coLin', 'ZABCD', 'ellie']
charz = 'ABCDEFGHIJKLM'
for name in lst:
if any(ch for ch in charz if name.startswith(ch)):
print(name)
答案 4 :(得分:0)
您可以使用正则表达式查看第一个字母是否在A-M
之间。
import re
lst = ['Ellie', 'Steve', 'Sam', 'Owen', 'Gavin']
for name in lst:
a = re.compile("^([A-M]).*$")
if a.match(lst):
print (name)
在正则表达式中,我们基本上在字符串lst
开始后检查[A-M]
是否与A
或M
到^
的模式匹配,其次是按.*
,多次匹配任何字符(除了新行),直到字符串$
结束。