如何在嵌套列表中找到元素的索引?

时间:2018-08-25 15:39:36

标签: python python-3.x

我有以下列表:

a = ["a", "b", "c", "d", "e", "f"]
b = [a[5], a[4], a[3]]

如果我使用b.index("f"),我将得到0。但是,我希望输出的是5。如何获得列表a到列表b中的“ f”索引?

3 个答案:

答案 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])}