2015-10-05 57 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) 

雖然不重...

相關問題