如何在Python中为字符分配整数值而不添加ASCIS
我不知道如何有效地问这个问题,但我需要做的是给字符分配整数值,使字符的加法不等于第一个加第二个,而是等于序列中的下一个数字 例如: 如果我使用ascii值将a-z设置为1-26,那么如果我有字符串如何在Python中为字符分配整数值而不添加ASCIS,python,string,integer,char,ascii,Python,String,Integer,Char,Ascii,我不知道如何有效地问这个问题,但我需要做的是给字符分配整数值,使字符的加法不等于第一个加第二个,而是等于序列中的下一个数字 例如: 如果我使用ascii值将a-z设置为1-26,那么如果我有字符串ab,那么总和将是3 但是,我希望ab被分配27,ac=28,ad=29等等 所以a=1但是az=51(如果我只是a+z,那就不是27了) 我不确定这是否会影响解决方案,但条件之一是字符串中的字母必须按字母顺序排列,因此字符串可以是“abc”但不能是“cat” 谢谢 可以按照请求的方式计算索引,而无需构
ab
,那么总和将是3
但是,我希望ab
被分配27
,ac=28
,ad=29
等等
所以a=1
但是az=51
(如果我只是a+z
,那就不是27了)
我不确定这是否会影响解决方案,但条件之一是字符串中的字母必须按字母顺序排列,因此字符串可以是“abc
”但不能是“cat
”
谢谢 可以按照请求的方式计算索引,而无需构建所有可能字符串的列表,但这需要一些技巧。下面是一个有效方法的实现:
导入itertools
导入字符串
字母=字符串。ascii_小写
定义参考(最大长度=4):
“”“所需索引操作的引用实现。”“”
a=[]
对于范围内的k(最大长度+1):
用于itertools中的梳。组合(字母,k):
a、 附加(“.join(comb))
返回a.index
def选择(n,k):
“二项式系数”n选择k“。”
如果k<0:
返回0
结果=1
对于范围(k)内的i:
结果*=n-i
结果/=i+1
返回结果
def索引:
“”“索引操作的有效实现。”“”
n=长(s)
选项=len(字母)
结果=0
对于枚举中的i、c:
新选项=长(字母)-字母索引(c)
结果+=选择(选项,n-i)-选择(新选项,n-i)
选项=新选项-1
对于范围(n)中的i:
结果+=选择(长度(字母),i)
返回结果
测试字符串=[
“a”、“j”、“ab”、“az”、“jw”、“yz”、“abc”、“厌恶”、“几乎”,
“开始”,“bijoux”,“活检”,“黑猩猩”,“斜纹棉布”,“印花棉布”]
ref_index=_reference(最大值(映射(len,测试字符串)))
对于测试_字符串中的s:
打印“{0:8}{1:8}{2:8}”
该脚本将高效函数的输出与蛮力实现进行比较,结果是
a 1 1
j 10 10
ab 27 27
az 51 51
jw 228 228
yz 351 351
abc 352 352
abhors 91047 91047
almost 133902 133902
begins 154337 154337
bijoux 171130 171130
biopsy 172655 172655
chimps 201678 201678
chinos 201734 201734
chintz 201781 201781
作业你是否禁止将“aa”作为字母顺序标准的一部分?我不完全理解这些要求。
“z”
和“aa”
的结果应该是什么?似乎双方都应该给出26分。这是正确的吗?这是一个类项目的一部分,aa将被排除在外。由于字符串必须采用递增格式,因此第二个字母必须位于第一个字母之后,依此类推。所以z将给出26,aa将返回0I,我正要点击submit(在类似于答案的无代码教程中)。作为我的代码工作的证明,indexify(“”.join(sorted(“porse”))==252666。。我使用了Greg K的unchoose函数。@DSM:像教程一样的答案可能会很受欢迎,因为我的答案没有解释它是如何工作的。我对“取消选择”一无所知——我只是根据一些基本的组合考虑编造了上面的代码。@will:如果这回答了你的问题,你可以点击左边的复选标记来接受答案。