Python 按字母升序查找字符列表的数字索引
我正在写一个加密程序,可以进行柱状变换。 一个人以字符串的形式输入一个键,例如,key='ZEBRAS' 我需要确定每个字母对应的数字索引,按字母升序排列。 比如说,Python 按字母升序查找字符列表的数字索引,python,sorting,cryptography,Python,Sorting,Cryptography,我正在写一个加密程序,可以进行柱状变换。 一个人以字符串的形式输入一个键,例如,key='ZEBRAS' 我需要确定每个字母对应的数字索引,按字母升序排列。 比如说, Z E B R A S 632415 A是最高的,所以它排名第一。z是最低的,所以它的排名是6。 我想将这个值存储到一个适当的数据结构中,因此当我去加密一条消息时,我将首先读取对应于位置1的列,最后读取对应于位置6的列 创建一个临时列表来存储已排序的单词,并从临时列表中提取位置。下面是示例代码: >>> wo
- Z E B R A S
- 632415
我想将这个值存储到一个适当的数据结构中,因此当我去加密一条消息时,我将首先读取对应于位置1的列,最后读取对应于位置6的列 创建一个临时列表来存储已排序的单词,并从临时列表中提取位置。下面是示例代码:
>>> word = 'ZEBRAS'
>>> sorted_word = sorted(word)
>>> sorted_word
['A', 'B', 'E', 'R', 'S', 'Z']
>>> index_string = [sorted_word.index(a)+1 for a in word]
>>> index_string
[6, 3, 2, 4, 1, 5]
创建临时列表以存储已排序的单词,并从临时列表中提取位置。下面是示例代码:
>>> word = 'ZEBRAS'
>>> sorted_word = sorted(word)
>>> sorted_word
['A', 'B', 'E', 'R', 'S', 'Z']
>>> index_string = [sorted_word.index(a)+1 for a in word]
>>> index_string
[6, 3, 2, 4, 1, 5]
从已排序且唯一的字母组和索引(从1到字符串长度)创建一个字典(您需要unicity,或者如果一个字母多次出现,将生成多个索引(如下所示,我在单词中添加了一个S):
sl
包含:
{'Z': 6, 'A': 1, 'E': 3, 'R': 4, 'S': 5, 'B': 2}
要“加密”,请将字典应用于字符串:
sc = [sl[c] for c in s]
print(sc)
结果:
[6, 3, 2, 4, 1, 5, 5]
从已排序且唯一的字母组和索引(从1到字符串长度)创建一个字典(您需要unicity,或者如果一个字母多次出现,将生成多个索引(如下所示,我在单词中添加了一个S):
sl
包含:
{'Z': 6, 'A': 1, 'E': 3, 'R': 4, 'S': 5, 'B': 2}
要“加密”,请将字典应用于字符串:
sc = [sl[c] for c in s]
print(sc)
结果:
[6, 3, 2, 4, 1, 5, 5]
谢谢你的意见。我正在寻找多个重复的信作为一个不同的分数计算。所以“斑马”将作为一个结果 我所做的是使用键中的纯文本创建一个类,以查找字符串中字母的索引,以及字母的字母权重。然后我按初始权重和位置对其进行排序,然后调整最终权重,使其在字符串中的稍后位置更重
import alpha
class KeyChar(object):
def __init__(self,l,pos,w):
self.letter = l
self.position = pos
self.weight = w
def setWeight(self,w):
self.weight = w
def getRawKeyList(key):
key_list = []
key_weight_normalized = dict()
i = 0
for c in key:
weight = alpha.giveAlphabet('u')[c]
char = KeyChar(c,i,weight)
i=i+1
key_list.append(char)
return key_list
def adjustKeyWeights(key_obj_list):
#first sort based off weight
kchar_sorted = sorted(key_obj_list, key = lambda kchar: (kchar.weight,kchar.position))
i=0
for k in kchar_sorted:
#print k.letter, k.position,
k.setWeight(i) #readjust weights based on weight
#print k.weight
i=i+1
return kchar_sorted
# return weighted key sorted by letter weight (smallest letter first)
def getWeightedKeyList(key):
k_adjusted = adjustKeyWeights(getRawKeyList(key))
final_key = sorted(k_adjusted, key = lambda kchar: kchar.weight)
key_list = getKeyAsList(final_key)
return final_key,key_list
def main():
key = 'ZEBRASAB'
key_obj_list,key_list = getWeightedKeyList(key.upper())
#DEBUGGING / TESTING
for k in key_obj_list:
print k.letter, k.position, k.weight
main()
谢谢你的意见。我正在寻找多个重复的信作为一个不同的分数计算。所以“斑马”将作为一个结果 我所做的是使用键中的纯文本创建一个类,以查找字符串中字母的索引,以及字母的字母权重。然后我按初始权重和位置对其进行排序,然后调整最终权重,使其在字符串中的稍后位置更重
import alpha
class KeyChar(object):
def __init__(self,l,pos,w):
self.letter = l
self.position = pos
self.weight = w
def setWeight(self,w):
self.weight = w
def getRawKeyList(key):
key_list = []
key_weight_normalized = dict()
i = 0
for c in key:
weight = alpha.giveAlphabet('u')[c]
char = KeyChar(c,i,weight)
i=i+1
key_list.append(char)
return key_list
def adjustKeyWeights(key_obj_list):
#first sort based off weight
kchar_sorted = sorted(key_obj_list, key = lambda kchar: (kchar.weight,kchar.position))
i=0
for k in kchar_sorted:
#print k.letter, k.position,
k.setWeight(i) #readjust weights based on weight
#print k.weight
i=i+1
return kchar_sorted
# return weighted key sorted by letter weight (smallest letter first)
def getWeightedKeyList(key):
k_adjusted = adjustKeyWeights(getRawKeyList(key))
final_key = sorted(k_adjusted, key = lambda kchar: kchar.weight)
key_list = getKeyAsList(final_key)
return final_key,key_list
def main():
key = 'ZEBRASAB'
key_obj_list,key_list = getWeightedKeyList(key.upper())
#DEBUGGING / TESTING
for k in key_obj_list:
print k.letter, k.position, k.weight
main()
有什么问题吗?创建列表
6 3 2 4 1 5
,创建数据结构,加密?有什么问题吗?创建列表6 3 2 4 1 5
,创建数据结构,加密?除了这个词以外,对任何其他情况都不起作用。我想知道它怎么会不起作用。你有一个不起作用的词的例子吗?对不起,我不清楚n我的问题或注释。我也希望处理相同字母的多个实例。我通过创建一个类KeyChar(object):def uu init_u(self,l,pos,w):self.letter=l self.position=pos self.weight=w def setWeight(self,w)解决了这个问题:self.weight=wd不适用于除此单词以外的任何其他情况。我不知道它怎么会不起作用。您有一个不起作用的单词的示例吗?抱歉,我的问题或注释不清楚。我正在寻找处理相同字母的多个实例。我通过创建一个类KeyChar(object):def\u init解决了这个问题__(self,l,pos,w):self.letter=l self.position=pos self.weight=w def setWeight(self,w):self.weight=w