如何将[A-Z]分配给多维数组Py2.7中的值

时间:2018-01-20 19:46:02

标签: python arrays list multidimensional-array

上下文

我有一个数组列表中的数字,我想根据数字在数组中附加一个字母。

代码

numbers = [] 
numbers.append(9,8,7,6,5,4,3,2,1)

伪代码

我尝试了类似这样的事情,但却陷入了困境,只为每个字母分配[A-Z]

for x in numbers:
   x.join('[A-Z]')

我想添加A到9,B到8等等......

如何动态执行此操作?

3 个答案:

答案 0 :(得分:1)

您可以使用chr将数字转换为具有该ASCII值的字符。由于a的ASCII为97,因此将97添加到列表中的索引并将其转换回字符将为您提供越来越多的字符。你所缺少的只是一些列表理解,将它们放在一起:

result = [str(x[1]) + chr(97 + x[0]) for x in enumerate(numbers)]

答案 1 :(得分:1)

import string

numbers = list(range(9,0,-1))   # list of numbers from range (you could use range directly)

paired = list(zip (numbers,string.ascii_uppercase))
di     = dict(zip (numbers,string.ascii_uppercase))
di2    = dict(zip (string.ascii_uppercase, numbers))

print (paired) # these are tuples, numbers first

print(di)      # dictionary, number as key

print(di2)     # dictionary, alpha as key

输出:

[(9, 'A'), (8, 'B'), (7, 'C'), (6, 'D'), (5, 'E'), (4, 'F'), (3, 'G'), (2, 'H'), (1, 'I')]

{9: 'A', 8: 'B', 7: 'C', 6: 'D', 5: 'E', 4: 'F', 3: 'G', 2: 'H', 1: 'I'}

{'A': 9, 'B': 8, 'C': 7, 'D': 6, 'E': 5, 'F': 4, 'G': 3, 'H': 2, 'I': 1}

string.ascii_uppercase是一个包含其命名的const, zip需要n次迭代并在索引上匹配它们 - 最短的可迭代获胜,更长的元素被丢弃。

Doku:zipstring

答案 2 :(得分:1)

如果我理解正确,你需要一个看起来如下的多维数组:

[('A', 9), ('B', 8),  # ... ]

在这种情况下,zip很有用,您可以使用string.ascii_uppercase

import string
letters_to_numbers = list(zip(string.ascii_uppercase, numbers))

# => [('A', 9), ('B', 8), ...]

dict工作原理的一个很好的副作用是我们可以将其传递到dict并获得您期望的结果('A'映射到9等):

letters_to_numbers = dict(zip(string.ascii_uppercase, numbers))
# => {'A': 9, 'B', 8, ...}

请注意,在构建numbers时,您不需要使用追加,您只需使用文字:

numbers = [9, 8, 7, 6, 5, 4, 3, 2, 1]

如果您的意图是数字始终是这样的降序系列,您应该查看范围:

numbers = list(range(9, 0, -1))  # = [9, 8, 7, ..., 1]