最近刷leetcode遇到分行取字符串再重新拼接的題目,解題過程中使用了動態生成變量的相關辦法。后來發現用字典更加簡單。
動態生成如下:
1 for i in range(5): 2 locals()['L%s'%i] = 'haha' 3 locals()['L%s'%2] = 'xixi' 4 5 print locals()['L%s'%1],locals()['L%s'%2],L2 6 7 8 output: 9 haha xixi xixi
其中運用了locals()來返回變量。
這個方法其實很一般,如果運用迭代來生成字典則非常簡單。
附動態生成變量與字典的截圖代碼對比:
1 #動態生成變量 2 class Solution(object): 3 def convert(self, s, numRows): 4 if numRows == 1: 5 return s 6 names = locals() 7 for i in range(1,numRows+1): 8 names['l%s'%i] = '' 9 n = 1 10 i = 0 11 while i < len(s): 12 while n < numRows: 13 if i == len(s): 14 break 15 names['l%s'%n] += s[i] 16 n +=1 17 i +=1 18 while n > 1: 19 if i == len(s): 20 break 21 names['l%s'%n] += s[i] 22 n -= 1 23 i += 1 24 out = '' 25 for i in range(1,numRows+1): 26 print names['l%s'%i] 27 out +=names['l%s'%i] 28 print out 29 return out 30 31 32 #使用字典 33 class Solution(object): 34 def convert(self, s, numRows): 35 if numRows == 1: 36 return s 37 ldict = {} 38 for i in range(1,numRows+1): 39 ldict[i] = '' 40 n = 1 41 i = 0 42 while i < len(s): 43 while n < numRows: 44 if i == len(s): 45 break 46 ldict[n] += s[i] 47 n +=1 48 i +=1 49 while n > 1: 50 if i == len(s): 51 break 52 ldict[n] += s[i] 53 n -= 1 54 i += 1 55 out = '' 56 for i in ldict.values(): 57 out +=i 58 return out
字典顯得簡潔的多,更適合python。