我有以下列表:
a = ["a", "b", "c", "d", "e", "f"]
b = [a[5], a[4], a[3]]
如果我使用b.index("f")
,我将得到0。但是,我希望输出的是5。如何获得列表a到列表b中的“ f”索引?
答案 0 :(得分:4)
您不能这样做,因为a
中的元素是字符串,它们不能“知道”列表中的位置。因此,当您从列表中将它们编入索引(例如a[5]
)时,字符串无法告诉您它们在列表中的来源。
我不确定创建此新列表的目的是什么,但是您可以仅将元素的索引而不是元素本身存储在b
中。
例如
b = [5, 4, 3]
这将允许您创建一个函数,该函数将“通过列表a
获取列表b
中[元素的索引:
def get_ind_in_a_thru_b(e):
i = a.index(e)
if i in b: return i
else: raise ValueError
就像有某种神奇的方法一样可以获取b
中元素的索引,就像它们在a
中一样:
>>> get_ind_in_a_thru_b('f')
5
>>> get_ind_in_a_thru_b('g')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in get_ind_in_a_thru_b
ValueError: 'g' is not in list
>>> get_ind_in_a_thru_b('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in get_ind_in_a_thru_b
ValueError
请注意,即使'a'
在列表a
中,由于它不在列表b
中,因此也不会返回
答案 1 :(得分:2)
这是不可能的。 b
的元素被解析为字符串,并且丢失了在a
中对其索引的所有了解。您可以编写一个小类来存储值和索引:
from operator import attrgetter
a = ["a", "b", "c", "d", "e", "f"]
class GetItemPos():
def __init__(self, L, idx):
self.idx = idx
self.var = L[idx]
b = [GetItemPos(a, 5), GetItemPos(a, 4), GetItemPos(a, 3)]
indices = list(map(attrgetter('idx'), b)) # [5, 4, 3]
values = list(map(attrgetter('var'), b)) # ['f', 'e', 'd']
答案 2 :(得分:0)
这样,b将为["f", "e", "d"]
,并且该元素的索引为0,1,2。不过,您可以通过以下方式创建b:
b = [a.index(a[5]), a.index(a[4]), a.index(a[3])]
否则,如果需要索引和值,则可以使用字典:
b = {a[3]: a.index(a[3]), a[4]: a.index(a[4]),a[3]: a.index(a[3])}