的Python:打印是开头的所有姓名,并以相同字母
问题描述:
我有员工姓名的蟒蛇排列如下结束:的Python:打印是开头的所有姓名,并以相同字母
employees=["Greg McGuiness", "Lola White", "Richard Bright", "Chloe Nelson", "Bradley Long", "Chiara Samos"]
我需要打印出所有名字中姓或名开始,用相同的字母结尾,在我的例子应该打印这些名字:
Greg McGuiness
Chloe Nelson
Chiara Samos
我一直在用正则表达式玩耍,但似乎无法得到它的权利。
答
为什么是正则表达式?这是一个可怕的“单线”。
from itertools import izip
employees=["Greg McGuiness", "Lola White", "Richard Bright", "Chloe Nelson", "Bradley Long", "Chiara Samos"]
print([
n for n, (f, l) in izip(employees, (e.split(' ') for e in employees))
if f[0].lower() == f[-1].lower()
or l[0].lower() == l[-1].lower()
])
['Greg McGuiness', 'Chloe Nelson', 'Chiara Samos']
答
你不需要正则表达式这个
for employee in employees:
for name in employee.split(" "):
if name[0].lower() == name[len(name)-1].lower():
print(employee)
+3
'name [len(name)-1]'应该在惯用Python中写成'name [-1]'。 –
答
你可以做,没有正则表达式:
for i in employees:
for name in i.split(' '):
if name.lower().endswith(name[0].lower()):
print i
break
答
我会给与正则表达式的解决方案。
import re
employees=["Greg McGuiness", "Lola White", "Richard Bright", "Chloe Nelson", "Bradley Long", "Chiara Samos"]
print [i for i in employees if re.findall(r"\b(\w)\w*\1\b",i,re.I)]
答
对于真正的功能一个衬垫:)
In [5]:
filter(lambda e: any(x[0].lower() == x[-1].lower() for x in e.split()), employees)
Out[5]:
['Greg McGuiness', 'Chloe Nelson', 'Chiara Samos']
或者更可读的缘故:
filter(
lambda e: any(x[0].lower() == x[-1].lower()
for x in e.split()),
employees)
虽然不重...
为什么“理查德·布赖特“? – Andy
Richard Bright如何符合这个标准?我在这里错过了什么吗? –
@TheRootCause提供的5个中没有满意的答案吗? – rll