"rank" 字符串中的每个字符按其在字母表中出现的索引

"rank" each character in a string by the index at which they appear in the alphabet

我不知道如何从 arr1 = ['johaj'] --> arr2 = ['2','4','1','0','3' ] 我无法很好地描述我的意思,所以我希望你能从这个例子中理解它。我需要获取 'alphabetical indexes'.

数组

非常感谢您的解决方案,我该如何在 Python 中做到这一点。 谢谢

如果你想将一个字符串翻译成字母字符索引列表,你可以制作一个以字母为键,索引为值的字典。然后你通过这个字典循环你的字符串并获取值(索引),然后你可以将其附加到列表中。

我认为问题需要更好地解释或提供示例代码,您提供的信息不足以按原样回答问题。

查看您提供的信息。我相信您正在尝试使用排序后的索引对数组进行排序,但顺序是原始数组吗?

为了更简单,

     my_string = "johaj"
     my_array = ["a','h','j','j','o']
   
     # return the index of the letter in my_array and add it to a secondary 
     array that matches the order of my_string

这是正确的吗?

编辑:这是我能想到的最好的。希望对你有帮助

    my_string = input("word? > ")
    my_array = []
    result_array = []
    counter = 0
    my_dict = {}

    for char in my_string:
        my_array.append(char)

    sorted_array = sorted(my_array)

    for i in sorted_array:
        my_dict[i] = counter
    counter += 1

    for i in my_string:
        result_array.append(my_dict[i])

    print(result_array)

这对你有用:

arr1 = ['johaj']

arr2 = []
for item in arr1:
  origins = list(zip(item, list(range(len(item)))))
  origins.sort()
  ranks = list(range(len(item)))
  positioned = {origin:rank for origin, rank in zip(origins, ranks)}

  ranked = [None] * len(item)
  for origin in origins:
    ranked[origin[1]] = positioned[origin]
  arr2.append(ranked)

print(arr2)

输出:

[[2, 4, 1, 0, 3]]

因为 arr1 是一个数组,您必须遍历该数组以获取每个项目。这意味着 arr2 将是一个 two-dimensional 数组,它将 return arr1 中每个项目的排名。例如,如果:

arr1 = ['johaj', 'foo', 'bar']

它将输出:

[[2, 4, 1, 0, 3], [0, 1, 2], [1, 0, 2]]