List 如何比较列表中的变量(在不改变列表中字符位置的情况下,按从1到n的顺序对字符进行编号)
简而言之,我想在不改变字符在列表中的位置的情况下,按从1到n的顺序对字符进行编号 假设我有一个名为key=['c','a','t']的列表,我该怎么做呢 根据每个字母相对于其他字母在字母表中的位置为每个字母指定一个数字。从1开始,一直到len(key),这样我们的key就变成了[2,1,3] 我真的被难住了。我有办法将它们转换成数字,但我不确定如何比较它们,以使上述情况发生。任何帮助、提示、想法或解释都将不胜感激 这就是我目前所拥有的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
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]
下面是函数中发生的情况:
sorted()
负责列表转换enumerate()
,因此我们可以迭代唯一值列表中的索引和值:字母->数字映射字典。我们使用第3行中的词典查找输入词典中每个字母的数字
您可能需要根据处理重复项的方式对此进行轻微修改:)如果列表中有重复项,例如您希望对['c'、'a'、't'、'a'、'c']得到什么结果,该怎么办?这是一个很好的观点,它们应该是相同的,因此在您的示例[2,1,3,1,2]中,我不熟悉使用set()或enumerate()。我会调查这些,并试图了解这里发生了什么。在此期间,该计划正在运作,谢谢你greatly@StefanPochmann集合是无序集合,尽管看起来排序(set(…)会自动执行列表转换。我会在回答中解决这个问题。至于变量
cat
,它应该是一个字符串:)@Dead\u Ling0我添加了一些解释。