python - 为列表中的每个值指定字母

时间:2011-06-20 14:05:50

标签: python

我在for循环中有一个值列表。例如myList = [1,5,7,3]我用来创建条形图(使用谷歌图表)

我想用字母(A-Z)标记每个值,例如A = 1,B = 5,C = 7,D = 3

通过for循环执行此操作的最佳方法是什么

e.g。

for x in myList:
    x.label = LETTER OF THE ALPHABET

列表的大小可以是任意长度,因此不一定只是A到D

修改

myList是一个对象列表而不是数字,正如我在上面的例子中所说的那样。每个对象都附有一个标题(可能是数字,文本字母等),但这些标题很长,所以在谷歌图表上显示它们时会搞得一团糟。因此,在图表上,我将用A,B,C,....的字母标记图表到myList的长度,然后在图表上有一个键,用图表上的字母和实际标题交叉引用。 myList的长度很可能小于10,因此不必担心字母的运行。

希望这可以解决一些问题

10 个答案:

答案 0 :(得分:4)

如果你想继续......,Y,Z,AA,AB,...你可以使用itertools.product:

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

部分输出:

23 X
24 Y
25 Z
26 AA
27 AB
28 AC
29 AD

答案 1 :(得分:2)

import string
for i, x in enumerate(myList):
    x.label = string.uppercase[i]

如果len(myList) > 26

,这当然会失败

答案 2 :(得分:1)

import string

myList = [1, 5, 7, 3]
labels = [string.uppercase[x+1] for x in myList]
# ['C', 'G', 'I', 'E']

答案 3 :(得分:1)

for i in range(len(myList)):
    x.label = chr(i+65)

有关函数here的更多信息。

答案 4 :(得分:1)

charValue = 65
for x in myList:
  x.label = chr(charValue)
  charValue++

如果您的列表超过26个字符,请小心

答案 5 :(得分:1)

首先,如果myList是整数列表,那么,

for x in myList:
    x.label = LETTER OF THE ALPHABET

无效,因为int没有属性label。您可以遍历myList并将标签存储在列表中(此处:pairs):

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个标签,您可以使用一些随机字符串生成功能,如下所示:

import random

def rstring(length=4):
    return ''.join([ random.choice(string.uppercase) for x in range(length) ])

答案 6 :(得分:1)

因为我喜欢列表推导,所以我会这样做:

[(i, chr(x+65)) for x, i in enumerate([1, 5, 7, 3])]

结果是:

[(1, 'A'), (5, 'B'), (7, 'C'), (3, 'D')]

答案 7 :(得分:0)

import string

for val in zip(myList, string.uppercase):
    val[0].label = val[1]

答案 8 :(得分:0)

您也可以使用以下内容:

from string import uppercase

res = ((x , uppercase[i%26]*(i//26+1)) for i,x in enumerate(inputList))

或者您可以使用类似的东西 - 请注意,这只是一个想法,如何处理长列表而不是解决方案:

from string import uppercase
res = ((x , uppercase[i%26] + uppercase[i/26]) for i,x in enumerate(inputList))

答案 9 :(得分:0)

您是否在寻找字典,其中每个值都键入字母表中的字母?在这种情况下,你可以这样做:

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

如果您需要处理长于字母表的列表,则必须添加其他逻辑。