在python中在列表内交换

在python中在列表内交换,python,dictionary,itertools,Python,Dictionary,Itertools,假设我有两个包含以下元素的列表。 i、 e l1的每个元素与l2中相同索引的对应元素相关。这种关系是这样的:如果用户输入列表l1,则输出为l2。假设用户输入列表,如['a'、'c'、'b'],则输出应为[1,3,2]。 如何执行以下功能?更简单的方法是使用字典,将l1的每个元素与l2的每个元素对应起来。但我正在寻找一种更好的方法,如果不是这样的话,那就是更小的代码。。 另一个例子(以防万一) 在纯Python中,请尝试: l2[l1.index('b')] 作为一个函数,它看起来像: def

假设我有两个包含以下元素的列表。 i、 e


l1
的每个元素与
l2
中相同索引的对应元素相关。这种关系是这样的:如果用户输入列表
l1
,则输出为
l2
。假设用户输入列表,如
['a'、'c'、'b']
,则输出应为
[1,3,2]
。 如何执行以下功能?更简单的方法是使用字典,将
l1
的每个元素与
l2
的每个元素对应起来。但我正在寻找一种更好的方法,如果不是这样的话,那就是更小的代码。。 另一个例子(以防万一)

在纯Python中,请尝试:

l2[l1.index('b')]
作为一个函数,它看起来像:

def lookup(element, l1, l2):
    return l2[l1.index(element)]
如果愿意的话,您可以通过在列表周围添加类包装器和一些错误处理等方式使这个问题更加复杂,但我不知道这是否值得


迭代l3(用户输入),以获取l1上项目的索引,使用此索引检索l2上的值,并将值附加到l4上,我假设您希望它们按如下方式排列:

a  b  c  d  e  f  g  h  i  j  k  l  ...
1  2  3  4  5  6  7  8  9  10 11 12 ...
你应该像你说的那样,定义一个字典来实现这一点。您可以使用
dict(zip(…)

或者您可以使用
enumerate
进行此操作

def get_nums(lst):
    letters = 'abcdefghijklmnopqrstuvwxyz' # also string.ascii_lowercase
    mapping = {lett:idx for idx,lett in enumerate(letters, start=1)}
    return [mapping[lett] for lett in lst]
正如所指出的,对于这种简单的映射,您可以使用如下内容:

def get_nums(lst):
    return [ord(lett) - 96 for lett in lst]

但是这对于其他映射来说不是很好扩展,如果输入没有严格定义,可能会导致意外问题。

dict很容易:
dict(zip(l1,l2))
但是我想输出一个列表,而不是单个元素,我不明白。输入
l1=['c'、'b'、'a']
l2=[3,2,1]
,输出应该是什么?@Rod直接从以下问题开始:“如果用户输入一个列表,例如
['a'、'c'、'b']
,那么输出应该是
[1,3,2]
“OP有
['a'、'b'、'c']
的输入,并且希望输出
[1,2,3]
。这没用。OP的问题不清楚,但我明白你的意思。他真的想要
ord(l1[i])-96
“如果用户输入一个列表,如
['a','c','b']
,那么输出应该是
[1,3,2]
”,我似乎很清楚!是的,
[ord(lett)-96用于l1中的lett]
应该可以工作。多么像蟒蛇!我正要建议他用defs做点什么。
a  b  c  d  e  f  g  h  i  j  k  l  ...
1  2  3  4  5  6  7  8  9  10 11 12 ...
def get_nums(lst):
    letters = 'abcdefghijklmnopqrstuvwxyz' # also string.ascii_lowercase
    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
               17, 18, 19, 20, 21, 22, 23, 24, 25, 26] # range(1, 27)
    mapping = dict(zip(letters,numbers))
    return [mapping[lett] for lett in lst]
def get_nums(lst):
    letters = 'abcdefghijklmnopqrstuvwxyz' # also string.ascii_lowercase
    mapping = {lett:idx for idx,lett in enumerate(letters, start=1)}
    return [mapping[lett] for lett in lst]
def get_nums(lst):
    return [ord(lett) - 96 for lett in lst]