如何在列表中查找在其中存储另一个列表的元素并获取索引?

时间:2019-01-06 21:08:13

标签: arrays python-3.x

我想知道如何在可能存储另一个列表的列表上找到值及其索引。

我看过this post,但是如果要搜索的列表中有一个列表,则无法使用。

这是我的意思。 输入以下信息:

["foo", ["f", "g"], "bar", "a", ["b", "c", "d"]]

是否可以找到例如"f"并返回其索引?

我知道我可以使用递归之类的方法,但是有更快,更优雅的解决方案吗?

编辑:

此外,列表中可能有个以上列表。 例如,列表可以是:

["foo", ["f", ["b", "c", "d"], "g"], "bar", "a"]

我在Python 3中需要它。

3 个答案:

答案 0 :(得分:1)

在处理任意嵌套的数据时,很难想象有一个比简单的递归生成器更优雅的解决方案。这将返回所有索引,无论是否嵌套。

这将创建一个生成器,该生成器查找与[[11472, 8405, 11428, 6613], [11678, 9388, 10262, 6590], [2945, 25843, 6980, 2150], [1149, 24552, 7000, 5217], [27373, 3166, 4494, 2885], [19300, 4252, 7510, 6856], [17744, 5390, 7472, 7312]] 匹配的任何元素并产生索引。如果v是另一个列表,它将使用v产生在子列表上调用同一生成器的结果,同时跟踪父列表。

yield from

答案 1 :(得分:0)

我想这就是你想要的!

let list = ["foo", ["f", "g"], "bar", "a", ["b", "c", "d"]];

for (let h = 0; h < list.length; h++) {
    if (Array.isArray(list[h])) {
        for (let i = 0; i < list[h].length; i++) {
            console.log(list[h][i], h, i);
        }
    } else {
        console.log(list[h], h);
    }
}

上面的代码将打印以下内容:

foo 0
f 1 0
g 1 1
bar 2
a 3
b 4 0
c 4 1
d 4 2

答案 2 :(得分:0)

这是python解决方案:

arr = ["foo", ["f", "g"], "bar", "a", ["b", "c", "d"]]

for h in arr:
    if isinstance(h,list):
        for i in h:
            print(i, arr.index(h), h.index(i))
    else:     
        print(h, arr.index(h))