python用列表输出字母表_关于python:python – 为列表中的每个值分配字母

这篇博客讨论如何在Python中为列表中的每个值分配字母标签,以便于创建条形图。当列表长度可能超过26时,提出了不同的解决方案,包括使用字母表和处理长列表的方法。
摘要由CSDN通过智能技术生成

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

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

运行for循环的最佳方法是什么?

例如

for x in myList:

x.label = LETTER OF THE ALPHABET

列表可以是任何长度的,所以不一定只是A到D.

编辑

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

希望这能把事情搞清楚一点

如果列表的长度超过字母表的长度,您想要什么行为?

我想你还需要定义列表中的类型。 在您的示例中,您有一个ints列表,并且您无法向其添加属性。

如果你想继续...,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

我没有看过OP的编辑,现在看起来很没用。

对于OP来说也许没用,但总的来说一段非常好的片段可能会在某一天派上用场。谢谢!

import string

for i, x in enumerate(myList):

x.label = string.uppercase[i]

如果len(myList) > 26,这当然会失败

既然我喜欢列表推导,我会这样做:

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

结果如下:

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

首先,如果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) ])

charValue = 65

for x in myList:

x.label = chr(charValue)

charValue++

如果列表超过26个字符,请务必小心

for i in range(len(myList)):

x.label = chr(i+65)

更多关于这里的功能。

对于i> 190,这将因ValueError而失败。模数运算符%可用于将字符限制为例如大写字母。

@jforberg:很公道,一旦OP明确了他对这些案例的行为,我就会编辑。

我的意思是没有批评,我知道你也看到了它。我只是想指出来:)

@jforberg:真的没有冒犯,也许出错了!我完全按照你的意图看到它,需要澄清!那谢谢啦! :)

import string

myList = [1, 5, 7, 3]

labels = [string.uppercase[x+1] for x in myList]

# ['C', 'G', 'I', 'E']

如果x = 342怎么办?

你告诉我。这是你的问题。

@John:没有人会为你尝试。为什么不在python解释器中键入它并自己查找?

@Matt:我认为这不是OP的意图。我读它的方式,他希望列表(dict)的索引是['a'],['b'],['c']而不是[1],[2],[3]。

不可能知道OP的意图。

@Matt:这更像是一个陈述而不是一个问题因为我认为它会出错,因为没有342个字母的字母。我发布的问题措辞非常糟糕所以我已经更新了它,希望它现在应该更有意义。

@John是的,您的澄清显着提高了问题的质量。

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

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

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

你也可以使用这样的东西:

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))

import string

for val in zip(myList, string.uppercase):

val[0].label = val[1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值