我上周在一个测验中得到了这个问题,很多人都错了,所以我很确定它会在我们的期中:
编写一个函数,该函数将字符串列表作为参数 返回包含每个字符串的第一个字母的列表。 也就是说,如果输入参数是[“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
答案 0 :(得分: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 :(得分:1)
您可以使用list comprehension执行此操作。你肯定想读一读它们!这是一个最小的例子,它可以帮助您寻找:
>>> L = ["Daniel","Nashyl","Orla", "Simone","Zakaria"]
>>> [item[0] for item in L]
['D', 'N', 'O', 'S', 'Z']
这将遍历列表中的每个名称,并从原始列表中每个项目的第一个字母创建一个新列表。例如,"Daniel"[0] == 'D'
。不需要.split
。
答案 2 :(得分: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]
这是它的要点。