2015-05-09 56 views
2

我想了解一行for-loops并将它嵌入for-loops的正常命名法中。一衬垫for循环如下:了解python嵌套循环的一行

print ''.join((letter[i - 1]for i in (int(n) for n in key.split()))) 

我上面写了嵌套的for循环以常规的方式如下:

for n in key.split(): 
    n = int(n) 
    for i in n: 
     print ''.join(letter[i - 1]) 

我没有得到期望的结果。请有人可以解释我的思维错误的地方,或者上面的单行for循环怎么可以常规编写。提前致谢。小心在你的一行括号

+3

这些都是*列表内涵*,而不是 “循环”。搜索关键字将提供很多关于他们如何工作的阅读.. – user2864740

+1

你想用'为我在n'''做什么,其中'n'是'int'?一个'int'对象是不可迭代的 – ashwinjv

+2

这些是生成器表达式,而不是列表解析 – cababunga

回答

3

看:

print ''.join((letter[i - 1]for i in (int(n) for n in key.split()))) 
            ^---------------------------^ 

嵌套的generator很简单,就是为外发生器提供值的序列。它可以简化为

print ''.join((letter[int(i) - 1]for i in (n for n in key.split()))) 

或只是

print ''.join(letter[int(i) - 1] for i in key.split()) 

的等效回路将

for i in key.split(): 
    print letter[int(i) - 1], # Suppress the newline 
+0

谢谢@ chepner ..但是每次我用你的线打印,我在每封信后都得到一个空格。我该如何删除它?谢谢。 – deep

+0

呃,这是一个很好的问题。我不记得是否有打印*声明*的方式;或者将'from __future__ import print_function'添加到脚本的顶部,以便可以使用print(letter [int(i) - 1],end ='')',或者使用使用'''.join'的版本只使用'print'一次。 – chepner