2014-12-13 108 views
-1

將2d整數數組轉換爲String。例如myArray = [[1,2,3],[3,4,5]]到myArrayL = [[a,b,c],[c,d,e]] 並保留2d數組的形狀將2d整數數組轉換爲字符串python

其中1 = 「一」,2 = 「b」,3 = 「c」 的

+0

結果不會是'[[A,B,C],並[c,d,E]]',這將是'[ ['a','b','c'],['c','d','e']]''(除非您碰巧定義了'a,b,c,d,e ='abcde' '或類似的東西......)。另外,我假設你的意思是'3 =「c」',而不是'd'? – abarnert 2014-12-13 02:21:15

回答

1

有兩個部分此。

首先,根據您的規則,您如何將1這樣的數字轉換爲像'a'這樣的字母?其次,你如何將一個函數應用於列表中的所有元素?


對於第一種,寫入方法的一種方法是使用chr函數。該函數接受一個數字,併爲您提供具有該代碼點的字符的單字符字符串。特別是,chr(65)'a',chr(66)'b'等。所以,我們可以做chr(n + 64)

或者,我們可以使用ord功能,這是chr逆,所以不是硬編碼64,並不必記住這比'a'小於1,我們可以寫1那麼直接比'a'

def letter(n): 
    return chr(n + ord('a') - 1) 

當然,這不是唯一的方法。你也可以,例如,使用string.ascii_lowercase[n-1]。 (請注意,這些解決方案不僅適用於Python 3,其中「代碼點」始終爲Unicode,而且在Python 2中,其中「代碼點」是某些非特定8位編碼中的值,只要預期的編碼具有全部連續訂單,幾乎所有的東西你可能永遠遇到除非你有一些舊的EBCDIC文件躺在附近是真實的小寫字母的)。


對於第二,您可以使用list comprehension。你的例子是平的(1D)名單,所以我們會使用一個平面列表理解:

numbers = [2, 3, 4] 
letters = [letter(n) for n in numbers] 

如果你有名單的2D名單,只使用一個nested list comprehension

numbers = [[2, 3], [4, 5]] 
letters = [[letter(n) for n in row] for row in numbers] 
+0

感謝這幫助 – theBean 2014-12-13 02:22:11

1

可以相應的字母索引string.ascii_lowercase,它返回所有小寫字母。

import string 
myArray = [[1,2,3],[3,4,5]] 
result_array = [[string.ascii_lowercase[element-1] for element in row] for row in myArray] 

結果數組:

[['a', 'b', 'c'], ['c', 'd', 'e']] 
+0

爲什麼建立和使用字典而不是'string.ascii_lowercase [n-1]'? – abarnert 2014-12-13 02:25:16

+0

@abarnert謝謝,它似乎比創建字母映射字典更有效。 – 2014-12-13 02:34:11

+0

我不知道它是否更有效率,我懷疑它無論如何。重點是它是_simpler_。 – abarnert 2014-12-13 02:44:40