2014-12-13 109 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