0

练习几件事: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将每个项目打印为一个按字母顺序重新排序的单词字符串吗?

4

3 回答 3

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()])
于 2013-04-13T17:57:31.020 回答
2

你要这个:

' '.join([''.join(sorted(word)) for word in sentence.split(' ')])
于 2013-04-13T18:00:23.737 回答
1

An improved version of your first approach to work for sentences:

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()

output:

enter sentence: foo bar spam eggs
foo abr amps eggs
于 2013-04-13T18:07:41.993 回答