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
下面的答案可以完成任务。另外,此处的添加信息:下面的答案可以完成任务。另外,此处的添加信息: