Python lambda打印格式化的嵌套列表

时间:2013-04-13 17:56:22

标签: python string list lambda

练习几件事: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中的嵌套列表,它将每个项目打印成一串按字母顺序重新排序的单词吗?

3 个答案:

答案 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