我試圖在python中編寫代碼來生成輸入字符串的所有排列。在Python中打印時名稱錯誤消失
inp = raw_input()
out = [inp[0]]
for i in range(1,len(inp)):
#print [range(len(j)+1) for j in out]
out = [j[:k]+inp[i]+j[k:] for k in range(len(j)+1) for j in out]
print out
對於輸入 'ABC' 時,它輸出
Traceback (most recent call last): File "perm.py", line 6, in
out = [j[:k]+inp[i]+j[k:] for k in range(len(j)+1) for j in out]
NameError: name 'j' is not defined
shell returned 1
如果我取消線5,以及將碼看起來像
inp = raw_input()
out = [inp[0]]
for i in range(1,len(inp)):
print [range(len(j)+1) for j in out]
out = [j[:k]+inp[i]+j[k:] for k in range(len(j)+1) for j in out]
print out
對於輸入 'ABC' 時,它輸出
[[0, 1]]
[[0, 1, 2], [0, 1, 2]]
['cba', 'cab', 'bca', 'acb', 'bac','abc']
What sorce這是嗎?
您定義'j'。 – 2015-04-01 08:34:09
@MartijnPieters但是,這不僅僅是爲了印刷過程中使用的列表理解嗎?如果你說我必須明確地定義它們,'k'怎麼辦? – Cheeku 2015-04-01 08:35:21
我的意思是說,在你的列表理解中,你會得到'j'的名字錯誤,因爲當range(len(j)+1)執行時它還沒有被賦值,*除非你包含你的'print'語句,它具有分配給'j'的列表理解。 :-) – 2015-04-01 08:46:21