为字母分配值和对序列求和(不基于字母顺序)

时间:2015-10-18 14:32:58

标签: python

在Python中,我想知道是否可以为序列中的字母赋值,然后询问该序列的总和。到目前为止,我只是根据字母顺序看到了这一点。我所拥有的是一系列序列:

例如:ACEPAAG(每行一个序列),并希望为字母分配值:A = 100P = 150等,然后对该序列求和。

到目前为止,我遇到了枚举:

import string
d = {c: i for i,c in enumerate(string.ascii_uppercase, 150)}
d 
word = "AGP"
score = sum(d[c] for c in word)
score

据我所知,这只是增加150和字母顺序列表,有没有办法改变这一点,以便我可以选择哪个值与哪个字母相符?

4 个答案:

答案 0 :(得分:1)

我建议创建一个包含所有值的列表v,其中索引0的值是A,索引25的值是Z,等等。

然后而不是使用' i'在使用它时,将其用作v:

的索引
a = {c: v[i] for i,c in enumerate(string.ascii_uppercase)}

通过这种方式,您可以选择每个字母的值。

请记住,要使其正常工作,v中必须至少有26个元素,否则您将获得超出范围的索引错误。

答案 1 :(得分:1)

您可以将两个列表映射到字典中,如:

l = map(chr, range(65, 91))

print l
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

n = range(0, 27)

print n
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]

d = dict(zip(l,n))

print d
{'A': 0, 'C': 2, 'B': 1, 'E': 4, 'D': 3, 'G': 6, 'F': 5, 'I': 8, 'H': 7, 'K': 10, 'J': 9, 'M': 12, 'L': 11, 'O': 14, 'N': 13, 'Q': 16, 'P': 15, 'S': 18, 'R': 17, 'U': 20, 'T': 19, 'W': 22, 'V': 21, 'Y': 24, 'X': 23, 'Z': 25}

因此,您可以使用所需的数字加入列表。

score = sum(d[c] for c in word)
print score
21

答案 2 :(得分:0)

  

我想知道是否可以为序列中的字母赋值,然后询问该序列的总和。

我不知道你在OP中做了什么,所以我只是根据我认为你正在做的事情来回答。你试图总结一系列字母的ASCII值,对吧?

sequence_of_letters = "A sequence of letters and characters is better known as a string!"

print sum([ord(x) for x in sequence_of_letters]) # ord gives you the ASCII value
>>>6049

那是你在找什么?

答案 3 :(得分:0)

关于你在我的回答中的评论:

带有这样的行的文件:

156, 731, 942, 15, 514, 48, 95, 607, 282, 30, 733, 444, 135, 367, 236, 404, 799, 276, 854, 937, 469, 450, 999, 327, 970, 716, 96    
621, 536, 358, 502, 745, 583, 899, 653, 496, 311, 451, 951, 819, 658, 77, 44, 593, 523, 754, 326, 647, 232, 916, 806, 289, 529, 918

这样的代码:

try:
    f = open("c:\\temp\\listvalues.txt", "r")
    try:
        lines = f.readlines()
    finally:
        f.close()
except IOError:
    pass    

l = map(chr, range(65, 91))

num_list = []
for i in lines:
    num_list.append(i.strip().split(','))   

for num_line in num_list:  
    d = dict(zip(l,num_line))
    word = "AGP"
    score = sum(int(d[c]) for c in word)
    print score