2015-05-09 53 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