Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何比较列表中的变量(在不改变列表中字符位置的情况下,按从1到n的顺序对字符进行编号)_List_Python 3.x_Comparison - Fatal编程技术网

List 如何比较列表中的变量(在不改变列表中字符位置的情况下,按从1到n的顺序对字符进行编号)

List 如何比较列表中的变量(在不改变列表中字符位置的情况下,按从1到n的顺序对字符进行编号),list,python-3.x,comparison,List,Python 3.x,Comparison,简而言之,我想在不改变字符在列表中的位置的情况下,按从1到n的顺序对字符进行编号 假设我有一个名为key=['c','a','t']的列表,我该怎么做呢 根据每个字母相对于其他字母在字母表中的位置为每个字母指定一个数字。从1开始,一直到len(key),这样我们的key就变成了[2,1,3] 我真的被难住了。我有办法将它们转换成数字,但我不确定如何比较它们,以使上述情况发生。任何帮助、提示、想法或解释都将不胜感激 这就是我目前所拥有的 import string key = list(inpu

简而言之,我想在不改变字符在列表中的位置的情况下,按从1到n的顺序对字符进行编号

假设我有一个名为key=['c','a','t']的列表,我该怎么做呢 根据每个字母相对于其他字母在字母表中的位置为每个字母指定一个数字。从1开始,一直到len(key),这样我们的key就变成了[2,1,3]

我真的被难住了。我有办法将它们转换成数字,但我不确定如何比较它们,以使上述情况发生。任何帮助、提示、想法或解释都将不胜感激

这就是我目前所拥有的

import string

key = list(input("enter key: ").upper())
num = []
for i in key:
    num.append(string.ascii_uppercase.index(i)+1)

此解决方案假定应为重复条目分配相同的编号,以便

# ['c','a','t'] -> [2, 1, 3]
# ['c','a','t','c','a','t'] -> [2, 1, 3, 2, 1, 3]
您可以编写如下简单函数:

def get_alphabet_pos(lst):
    uniques = sorted(set(lst))  # set() to filter uniques, then order by value
    numbers = {letter: i+1 for i, letter in enumerate(uniques)}  # build a lookup dict
    return [numbers[key] for key in lst]

get_alphabet_pos('cat')  # [2, 1, 3]
下面是函数中发生的情况:

  • 在函数的第1行中,我们将列表转换为一个集合,以删除任何重复的值。从文档@中:
  • 集合是没有重复元素的无序集合

  • 仍然在第1行中,我们对集合进行排序并将其转换回列表。感谢@StefanPochmann指出
    sorted()
    负责列表转换

  • 在第2行中,我们使用了
    enumerate()
    ,因此我们可以迭代唯一值列表中的索引和值:

  • 第2行的其余部分是一个简单的dict理解,用于构建一个
    字母->数字映射字典。我们使用第3行中的词典查找输入词典中每个字母的数字


  • 您可能需要根据处理重复项的方式对此进行轻微修改:)

    如果列表中有重复项,例如您希望对['c'、'a'、't'、'a'、'c']得到什么结果,该怎么办?这是一个很好的观点,它们应该是相同的,因此在您的示例[2,1,3,1,2]中,我不熟悉使用set()或enumerate()。我会调查这些,并试图了解这里发生了什么。在此期间,该计划正在运作,谢谢你greatly@StefanPochmann集合是无序集合,尽管看起来排序(set(…)会自动执行列表转换。我会在回答中解决这个问题。至于变量
    cat
    ,它应该是一个字符串:)@Dead\u Ling0我添加了一些解释。