2014-03-30 162 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] 

这是它的要点。

相关问题