2013-04-13 64 views
0

练习几件事:lambda函数和字符串操作。我想找到没有导入任何东西的最有效的方法。Python 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

列表内涵是非常容易的位置:

' '.join([''.join(sorted(word)) for word in sentence.split()]) 

请注意,我们可以将字符串传递给sorted()直接

lambda不过是一个带有单个表达式的函数,它可以被定义为一个表达式本身;在这里我首先拉姆达结果赋值给一个变量:

alphabeticalWord = lambda w: ''.join(sorted(word)) 

' '.join([alphabeticalWord(word) for word in sentence.split()]) 
+0

谢谢,我用了lis而不是理解方法 – frankV

2

你想这样的:

' '.join([''.join(sorted(word)) for word in sentence.split(' ')]) 
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