2013-01-24 94 views
-1

我剛剛開始學習編程,並收到以下使用Python進行作業的問題。我想知道是否有人可以幫助解釋我需要做什麼使用Python將列表分成兩部分?

實現功能分區()將足球運動員列表分成兩組。更確切地說,它需要的名字(字符串)作爲輸入的列表,並打印的那些足球運動員的名字以之間的信中,包括A和M.

partition([‘Eleanor’, ‘Evelyn’, ‘Sammy’, ‘Owen’, ‘Gavin’]) 

輸出開始的名字:

Eleanor 

Evelyn 

Gavin 

partition([‘Xena’, ‘Sammy’, ‘Owen’]) 

不打印任何東西。

+3

到目前爲止你有什麼?你有什麼麻煩? – NPE

回答

2

根據具體問題的定義,你可能會尋找類似:

def partition(l): 
    return [firstname for firstname in l 
      if firstname[0].lower() in 'abcdefghijklm'] 

def partition2(l): 
    return [firstname for firstname in l 
      if 'a' <= ord(firstname[0].lower()) 
       and ord(firstname[0].lower()) <= 'm'] 

注意,這些嚴格一致的只有「A」和「M」之間的ASCII字符。

+0

我會將'abcdefghijklm'作爲參數傳遞給分區。 –

+0

恩,是的。那麼月亮的指數和階段呢? –

+0

咦?評論更多地針對發佈該問題的個人。他們提到他們剛剛開始,所以他們可能不那麼明顯。當單個函數更好時,我可以輕鬆地看到現在稱爲partitionAtoM()和partitionNtoZ()的兩個函數。 –

0

我不會在這種情況下用戶分區。 嘗試以下操作:

 
import re 
players = ['Eleanor', 'Evelyn', 'Sammy', 'Owen', 'Gavin'] 
am_players = filter(lambda p: re.match('^[A-M].*',p,re.I), players) 
nz_players = filter(lambda p: re.match('^[N-Z].*',p,re.I), players) 
+0

我認爲這是我會走的路,但由於海報提到他們只是開始編程,我認爲引入lamda和正則表達式可能太多了。 –

0

如果因爲「A」至「M」與字母開頭你的分區功能只打印名稱,然後partition(['Xena', 'Sammy', 'Owen'])不會打印出任何東西。

而這就是導致你的輸出爲空的原因。