2014-03-30 115 views
-2

我上禮拜我在測驗這個問題,很多人聽錯了,所以我敢肯定這將是對我們的中期:如何打印句子中每個單詞的第一個字母?

編寫一個函數,作爲一個參數字符串列表和 返回一個包含每個字符串的第一個字母的列表。 也就是說,如果輸入參數是[「Daniel」,「Nashyl」,「Orla」, 「Simone」,「Zakaria」],你的函數應該返回['D','N','O',' S', 'Z']。您提交的文件應該包含一個main()函數,該函數可以顯示您的函數可以工作。

我知道你可以使用這個[#:#]來打印任何單詞或句子的字母。

>>> `x = "Java, Python, Ruby"` 
>>> `x[:13]` 
'Java, Python,' 
>>> `x[:-1]` 
'Java, Python, Rub' 
>>> `x[:1]` 
'J' 

但是,在打印一串單詞的第一個字母時,我感到困惑。我也認爲這裏需要「.split」函數。我使用Python 3.3.3

回答

2
def first_letters(lst): 
    return [s[:1] for s in lst] 

def main(): 
    lst = ["Daniel","Nashyl","Orla", "Simone","Zakaria"] 
    assert first_letters(lst) == ['D', 'N', 'O', 'S', 'Z'] 

if __name__=="__main__": 
    main() 

str.split需要一個字符串,並將其分解成一個字符串列表。你的輸入已經是一個字符串列表,因此你不需要.split。

"mystring"[:1]獲取字符串的第一個字符(或""如果字符串是""與開始)。將其應用於輸入列表中的每個字符串,並返回結果。

+1

沒有解釋的代碼不是很有用。考慮:你想給他/她一條魚,還是教他/她釣魚? –

+0

@ T.J.Crowder:是的,你有一點;我很難相信人們可以把這麼基本的東西弄糟,但證據不斷堆積如下: -/ –

1

你可以用list comprehension來做到這一點。你一定會想要閱讀它們!這裏有一個小例子,做你在找什麼:

>>> L = ["Daniel","Nashyl","Orla", "Simone","Zakaria"] 
>>> [item[0] for item in L] 
['D', 'N', 'O', 'S', 'Z'] 

這遍歷在列表中的每個名稱,並創建從每個項目的原始列表的第一個字母一個新的列表。例如,"Daniel"[0] == 'D'。沒有.split是必要的。

+0

'item [:1]'比'item [0]'更安全 - 如果你曾經將它應用於空字符串,''「」[:1]'會返回一個空字符串,其中'「」[0]'拋出一個IndexError。 –

+0

嘿,我試圖使用這種形式,因爲我瞭解最多的,但我沒有得到我想要的結果。順便嘗試使用「輸入」功能。 – Reymy

+0

這是爲了說明如何獲取列表中每個項目的第一個字母,而不是測試問題的完整答案。嘗試將每行粘貼到Python交互式shell中。 – khagler

1

列表解析是很酷的,你應該學會使用它們,但是讓我解釋一下這裏發生了什麼,因爲在你的問題中,你說你很困惑如何用一堆字符串來做。

所以,你有一個字符串列表。列表是一個迭代集合,這意味着我們可以使用,例如遍歷它,一個for loop

words = ["Daniel","Nashyl","Orla", "Simone","Zakaria"] 
for word in words: 
    print word[:1] 

我敢肯定你被教導有關類這樣的循環。現在,而不是打印的第一個字母,讓我們構建一個包含這些字母的新名單:

result = [] 
for word in words: 
    result.append(word[:1]) 

在這裏,我創建了一個新的列表,然後對每一個字,我append編這個詞的首字母爲新名單。一個list comprehension做同樣的事情,以更加晦澀的語法,更優雅,有點更高的效率:

result = [word[:1] for word in words] 

這是它的要點。

相關問題