练习几件事:lambda函数和字符串操作。我希望找到最有效的方法来做到这一点,而无需导入任何东西。
所以这是一个简短的脚本,按字母顺序重新排序:
def alphabeticalOrder(word):
lst = [l for l in word]
return sorted(lst)
def main ():
word = raw_input('enter word: ')
print "".join(alphabeticalOrder(word))
if __name__ == '__main__':
main()
我希望对句子中的所有单词执行此操作:
def alphabeticalOrder(line):
lst = []
for word in line.split(" "):
lst.append(sorted(list(word)))
print lst # trouble here
def main ():
line = raw_input('enter sentence: ')
print alphabeticalOrder(line)
if __name__ == '__main__':
main()
所以我的问题是;你能编写一个lambda函数来迭代lst
中的嵌套列表,它将每个项目打印成一串按字母顺序重新排序的单词吗?
答案 0 :(得分:3)
列表理解在这里更容易:
' '.join([''.join(sorted(word)) for word in sentence.split()])
请注意,我们可以直接将字符串传递给sorted()
。
lambda只不过是具有单个表达式的函数,可以将其定义为表达式本身;在这里我首先将lambda结果赋给变量:
alphabeticalWord = lambda w: ''.join(sorted(word))
' '.join([alphabeticalWord(word) for word in sentence.split()])
答案 1 :(得分:2)
你想要这个:
' '.join([''.join(sorted(word)) for word in sentence.split(' ')])
答案 2 :(得分:1)
第一种句子工作方法的改进版本:
def alphabeticalOrder(word):
return "".join(sorted(lst)) #return the sorted string
def main ():
sent = raw_input('enter sentence: ')
print " ".join(map(alphabeticalOrder,sent.split())) #map alphabeticalOrder to each
#word in the sentence
if __name__ == '__main__':
main()
输出:
enter sentence: foo bar spam eggs
foo abr amps eggs