Python 为字母指定数值的更快方法?

Python 为字母指定数值的更快方法?,python,Python,我试图从列表中的单词中读取每个字符,然后根据该单词中的每个字母为它们赋值。我的代码太长了,我确信一定有一种更短的方法来完成它 for c in tempWord: if(c == "A"): tempSum += 1 elif(c == "B"): tempSum += 2 elif(c == "C"): tempSum += 3 elif(c == "

我试图从列表中的单词中读取每个字符,然后根据该单词中的每个字母为它们赋值。我的代码太长了,我确信一定有一种更短的方法来完成它

    for c in tempWord:
        if(c == "A"):
            tempSum += 1
        elif(c == "B"):
            tempSum += 2
        elif(c == "C"):
            tempSum += 3
        elif(c == "D"):
            tempSum += 4
        elif(c == "E"):
            tempSum += 5
        elif(c == "F"):
            tempSum += 6
        elif(c == "G"):
            tempSum += 7
        elif(c == "H"):
            tempSum += 8
        elif(c == "I"):
            tempSum += 9
        elif(c == "J"):
            tempSum += 10
        elif(c == "K"):
            tempSum += 11
        elif(c == "L"):
            tempSum += 12
        elif(c == "M"):
            tempSum += 13
        elif(c == "N"):
            tempSum += 14
        elif(c == "O"):
            tempSum += 15
        elif(c == "P"):
            tempSum += 16
        elif(c == "Q"):
            tempSum += 17
        elif(c == "R"):
            tempSum += 18
        elif(c == "S"):
            tempSum += 19
        elif(c == "T"):
            tempSum += 20
        elif(c == "U"):
            tempSum += 21
        elif(c == "V"):
            tempSum += 22
        elif(c == "W"):
            tempSum += 23
        elif(c == "X"):
            tempSum += 24
        elif(c == "Y"):
            tempSum += 25
        elif(c == "Z"):
            tempSum += 26
这可能是个愚蠢的问题,不过还是要谢谢你

if'A'
if'A'用于计算字符相对于
A的偏移量

if 'A'<=c<='Z':
    tempsum+=ord(c)-ord('A')+1
A = ord('A')
for c in tempWord:
    if 'A' <= c <= 'Z':
        tempSum += ord(c) - A + 1
A=ord('A')
对于tempWord中的c:
如果“A”用于计算字符相对于
A
的偏移量

A = ord('A')
for c in tempWord:
    if 'A' <= c <= 'Z':
        tempSum += ord(c) - A + 1
A=ord('A')
对于tempWord中的c:
如果‘A’那么:

import string

def assign(word):
    return sum(string.uppercase.index(ch.upper())+1 for ch in word)

print assign('SIMPLE')
那么:

import string

def assign(word):
    return sum(string.uppercase.index(ch.upper())+1 for ch in word)

print assign('SIMPLE')

对于这个问题,最好的建议是创建一个字典,将字母与数字联系起来:

d = {'A':1, 'B':2 ... }
并使用以下内容更改您的
if-else
噩梦:

tempSum += d[letter]
现在,通过详细查看您的示例和组织,似乎要求和的值是大写字母在字母表中的位置,因此pythonic方法可以使用如下
string
模块:

import string

tempSum += (string.uppercase.index(letter) + 1)

希望这能有所帮助。好吧,解决这个问题的最好建议是创建一个字典,将字母与数字联系起来:

d = {'A':1, 'B':2 ... }
并使用以下内容更改您的
if-else
噩梦:

tempSum += d[letter]
现在,通过详细查看您的示例和组织,似乎要求和的值是大写字母在字母表中的位置,因此pythonic方法可以使用如下
string
模块:

import string

tempSum += (string.uppercase.index(letter) + 1)

希望这对我有帮助。我想编一本字典。这应该比在列表上使用
.index
更好,因为dict查找是~O(1),但是
列表。index
可以在列表的长度上取O(n)(比如说,你总是在查找“Z”,你必须扫描整个列表)。它不像使用
ord
那样短,但更健壮

根据映射的复杂程度,您可能希望以多种不同的方式构建映射。其中之一是:

>>> import string
>>> d = {c: i for i,c in enumerate(string.ascii_uppercase, 1)}
>>> d
{'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4, 'G': 7, 'F': 6, 'I': 9, 'H': 8, 'K': 11, 'J': 10, 'M': 13, 'L': 12, 'O': 15, 'N': 14, 'Q': 17, 'P': 16, 'S': 19, 'R': 18, 'U': 21, 'T': 20, 'W': 23, 'V': 22, 'Y': 25, 'X': 24, 'Z': 26}
之后:

>>> word = "INCONTROVERTIBLE"
>>> score = sum(d[c] for c in word)
>>> score
201
或者,如果您想对丢失的字母更宽容,可以使用默认值为0的
.get
方法:

>>> word = "THIS IS A TEST"
>>> score = sum(d.get(c,0) for c in word)
>>> score
149

我倾向于编一本字典。这应该比在列表上使用
.index
更好,因为dict查找是~O(1),但是
列表。index
可以在列表的长度上取O(n)(比如说,你总是在查找“Z”,你必须扫描整个列表)。它不像使用
ord
那样短,但更健壮

根据映射的复杂程度,您可能希望以多种不同的方式构建映射。其中之一是:

>>> import string
>>> d = {c: i for i,c in enumerate(string.ascii_uppercase, 1)}
>>> d
{'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4, 'G': 7, 'F': 6, 'I': 9, 'H': 8, 'K': 11, 'J': 10, 'M': 13, 'L': 12, 'O': 15, 'N': 14, 'Q': 17, 'P': 16, 'S': 19, 'R': 18, 'U': 21, 'T': 20, 'W': 23, 'V': 22, 'Y': 25, 'X': 24, 'Z': 26}
之后:

>>> word = "INCONTROVERTIBLE"
>>> score = sum(d[c] for c in word)
>>> score
201
或者,如果您想对丢失的字母更宽容,可以使用默认值为0的
.get
方法:

>>> word = "THIS IS A TEST"
>>> score = sum(d.get(c,0) for c in word)
>>> score
149

我知道这已经5年了,但它填补了我所寻找的空白,所以我分享了我从中获得的功能

我的目标是将Excel列转换为数字,这样我就可以将它们输入到df.drop()函数中

这是我构建的函数,最多只能用于2个字符,但是您可以构建无限长度的循环

colNumbers = []

def letterTonumber(col):
    A = ord('A')
    tempSum = sum(ord(l) - A + 1 for l in col if 'A' <= l <='Z')

    return(tempSum)

def colParse(colNumbers, cols):
    for c in cols:
        if len(c) == 2:
            x=26*letterTonumber(c[0])
            y=letterTonumber(c[1])
            n=(x+y)-1
        else:
            n = letterTonumber(c)-1

        colNumbers.append(n)

cols = ['A','Z','AA','BB']
colParse(colNumbers, cols)

print(colNumbers)

>>> 0,25,26,53
colNumbers=[]
def字母编号(col):
A=ord('A')
tempSum=sum(ord(l)-A+1表示列中的l,如果'A'>0,25,26,53

我知道这已经5年了,但它填补了我所寻找的空白,所以我分享了我用它制作的功能

我的目标是将Excel列转换为数字,这样我就可以将它们输入到df.drop()函数中

这是我构建的函数,最多只能用于2个字符,但是您可以构建无限长度的循环

colNumbers = []

def letterTonumber(col):
    A = ord('A')
    tempSum = sum(ord(l) - A + 1 for l in col if 'A' <= l <='Z')

    return(tempSum)

def colParse(colNumbers, cols):
    for c in cols:
        if len(c) == 2:
            x=26*letterTonumber(c[0])
            y=letterTonumber(c[1])
            n=(x+y)-1
        else:
            n = letterTonumber(c)-1

        colNumbers.append(n)

cols = ['A','Z','AA','BB']
colParse(colNumbers, cols)

print(colNumbers)

>>> 0,25,26,53
colNumbers=[]
def字母编号(col):
A=ord('A')
tempSum=sum(ord(l)-A+1表示列中的l,如果'A'>0,25,26,53

下面的答案可以完成任务。另外,此处的添加信息:下面的答案可以完成任务。另外,此处的添加信息: