python - assign letter of the alphabet to each value in a list
我在for循环中有一个值列表。例如
我想用字母(A-Z)标记每个值,例如A = 1,B = 5,C = 7,D = 3
运行for循环的最佳方法是什么?
例如
1 2 | for x in myList: x.label = LETTER OF THE ALPHABET |
列表可以是任何长度的,所以不一定只是A到D.
编辑
myList是一个对象列表,而不是我在上面的示例中提到的数字。每个对象都附有一个标题(可能是数字,文本字母等),但这些标题很长,所以在谷歌图表上显示它们时会搞得一团糟。因此,在图表上,我将用A,B,C,....的字母标记图表到myList的长度,然后在图表上有一个键,用实际标题引用图表上的字母。 myList的长度很可能小于10,因此不必担心字母的运行。
希望这能把事情搞清楚一点
如果你想继续...,Y,Z,AA,AB,...你可以使用itertools.product:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import string import itertools def product_gen(n): for r in itertools.count(1): for i in itertools.product(n, repeat=r): yield"".join(i) mylist=list(range(35)) for value, label in zip(mylist, product_gen(string.ascii_uppercase)): print(value, label) # value.label = label |
部分输出:
1 2 3 4 5 6 7 | 23 X 24 Y 25 Z 26 AA 27 AB 28 AC 29 AD |
1 2 3 | import string for i, x in enumerate(myList): x.label = string.uppercase[i] |
如果
既然我喜欢列表推导,我会这样做:
1 | [(i, chr(x+65)) for x, i in enumerate([1, 5, 7, 3])] |
结果如下:
1 | [(1, 'A'), (5, 'B'), (7, 'C'), (3, 'D')] |
首先,如果
1 2 | for x in myList: x.label = LETTER OF THE ALPHABET |
不起作用,因为
1 2 3 4 5 6 7 8 | import string pairs = [] for i, x in enumerate(myList): label = string.letters(i) # will work for i < 52 !! pairs.append( (label, x) ) # pairs is now a list of (label, value) pairs |
如果您需要超过52个标签,您可以使用一些随机字符串生成功能,如下所示:
1 2 3 4 | import random def rstring(length=4): return ''.join([ random.choice(string.uppercase) for x in range(length) ]) |
1 2 3 4 | charValue = 65 for x in myList: x.label = chr(charValue) charValue++ |
如果列表超过26个字符,请务必小心
1 2 | for i in range(len(myList)): x.label = chr(i+65) |
更多关于这里的功能。
1 2 3 4 5 | import string myList = [1, 5, 7, 3] labels = [string.uppercase[x+1] for x in myList] # ['C', 'G', 'I', 'E'] |
您是否在寻找字典,其中每个值都键入字母表中的字母?在这种情况下,你可以这样做:
1 2 3 4 5 6 7 8 9 10 | from string import lowercase as letters values = [1, 23, 3544, 23] mydict = {} for (let, val) in zip(letters, values): mydict[let] = val <<< mydict == {'a': 1, 'c': 23, 'b': 3544, 'd': 23} <<< mydict['a'] == 1 |
如果需要处理长于字母表的列表,则必须添加其他逻辑。
你也可以使用这样的东西:
1 2 3 | from string import uppercase res = ((x , uppercase[i%26]*(i//26+1)) for i,x in enumerate(inputList)) |
或者你可以使用这样的东西 - 注意这只是一个想法如何处理长列表而不是解决方案:
1 2 | from string import uppercase res = ((x , uppercase[i%26] + uppercase[i/26]) for i,x in enumerate(inputList)) |
1 2 3 4 | import string for val in zip(myList, string.uppercase): val[0].label = val[1] |