2017-03-29 184 views
1

有没有办法让两个列表名为list1和list2,并且能够在另一个列表中查找一个条目的位置。即从python中的另一个列表中的一个列表中查找元素

list_one = ["0", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] 

list_two = ["h","e","l","l","o"] 

我的目的是让用户输入一个单词该计划随后将在一组对应的字母条目list_one

因此如果用户没有输入招呼计算机数字转换将返回85121215(作为项目的位置)

是有可能的方式做到这一点

+3

看起来像你的功课! – RaminNietzsche

+0

你想用list1中重复的字母做什么?如果没有重复或者您只想使用第一次出现的位置,则可以使用字典。 –

回答

5

仰望的项目在列表中的位置是不是一个非常有效的操作。字典是这种任务的更好的数据结构。

>>> d = {k:v for v,k in enumerate(list_one)} 
>>> print(*(d[k] for k in list_two)) 
8 5 12 12 15 

如果您list_one始终只是字母表,按字母顺序排列,它可能会更好和更简单的得到的东西通过使用内置函数ord工作。

+0

谢谢!它现在有效 –

0

x.index(i)返回元素列表x

print("".join([str(list_one.index(i)) for i in list_two])) 
85121215 
0

名单上使用.index()i的位置:

list_one = ["0", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] 

string = "hello" 
positions = [list_one.index(c) for c in string] 
print(positions) 
# [8, 5, 12, 12, 15] 
0

你可以遍历以为名单:

>>> for i in range(len(list_two)): 
...  for j in range(len(list_one)): 
...    if list_two[i]==list_one[j]: 
...      list_3.append(j) 
>>> list_3 
[8, 5, 12, 12, 15] 

但是win的回答更加优雅!

0

添加@ wim的答案,可以用简单的理解来完成。

>>> [list_one.index(x) for x in list_two] 
[8, 5, 12, 12, 15] 
+0

谢谢!这也帮助我。我正在寻找一种将输出存储为变量的方法,而您的方法就是这样。谢谢! –

相关问题