上下文
我有一个数组列表中的数字,我想根据数字在数组中附加一个字母。
代码
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等等......
如何动态执行此操作?
答案 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次迭代并在索引上匹配它们 - 最短的可迭代获胜,更长的元素被丢弃。
答案 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]