2015-10-05 60 views
1

我有员工姓名的蟒蛇排列如下结束:的Python:打印是开头的所有姓名,并以相同字母

employees=["Greg McGuiness", "Lola White", "Richard Bright", "Chloe Nelson", "Bradley Long", "Chiara Samos"] 

我需要打印出所有名字中姓或名开始,用相同的字母结尾,在我的例子应该打印这些名字:

Greg McGuiness 
Chloe Nelson 
Chiara Samos 

我一直在用正则表达式玩耍,但似乎无法得到它的权利。

+3

为什么“理查德·布赖特“? – Andy

+5

Richard Bright如何符合这个标准?我在这里错过了什么吗? –

+0

@TheRootCause提供的5个中没有满意的答案吗? – rll

回答

2

为什么是正则表达式?这是一个可怕的“单线”。

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'] 
2

你不需要正则表达式这个

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]'。 –

4

你可以做,没有正则表达式:

for i in employees: 
    for name in i.split(' '): 
     if name.lower().endswith(name[0].lower()): 
      print i 
      break 
2

我会给与正则表达式的解决方案。

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)] 
1

对于真正的功能一个衬垫:)

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) 

虽然不重...

相关问题