gpt4 book ai didi

python - 获取子集中元素的索引

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:08 24 4
gpt4 key购买 nike

我有一个列表和它的一个子集,想找到子集中每个元素的索引。我目前已经尝试过这段代码:

def convert_toindex(listof_elements, listof_indices):
for i in range(len(listof_elements)):
listof_elements[:] = [listof_indices.index(x) for x in listof_elements]
return listof_elements

list1 = ['lol', 'please', 'help']
list2 = ['help', 'lol', 'please', 'extra']

当我执行 convert_toindex(list1, list2) 时我想要发生的是输出为 [2, 0, 1]

但是,当我这样做时,我得到一个 ValueError: '0' is not in list.

但是,0 在两个列表中都没有出现,所以我不确定为什么会这样。

其次,如果我有一个列表列表,并且我想处理大列表中的所有嵌套列表,我会做这样的事情吗?

for smalllist in biglist: 
smalllist[:] = [dict_of_indices[x] for x in smalllist]

其中 dict_of_indices 是根据最佳答案创建的索引字典。

最佳答案

问题是,您不是只做一次,而是一遍又一遍地做 N 次:

 for i in range(len(listof_elements)):
listof_elements[:] = [listof_indices.index(x) for x in listof_elements]

第一次,您将 listof_elements 中的每个值替换为其在 listof_indices 中的索引。到目前为止,一切都很好。事实上,您应该在那里完成。

然后你又做了第二次。您在 listof_indices 中查找每个索引,就好像它们是值一样。其中一些不存在。所以你得到一个错误。

您只需删除外层循环即可解决此问题。第一次后你已经完成了。

您可能会感到困惑,因为这个问题似乎本质上需要两个循环——但您已经有了两个循环。第一个是列表理解中显而易见的,第二个是隐藏在 listof_indices.index 中的。


虽然我们正在做这件事:虽然这个问题确实需要两个循环,但它要求它们嵌套。

与其循环遍历 listof_indices 来查找每个 x,您可以提前遍历它来构建字典:

dict_of_indices = {value: index for index, value in enumerate(listof_indices)}

然后直接在该字典中查找:

listof_elements[:] = [dict_of_indices[x] for x in listof_elements]

除了更快(O(N+M) 时间而不是 O(N*M))之外,我认为这也更容易理解, 并进行调试。第一行可能有点棘手,但您可以轻松打印出字典并验证它是否正确。然后第二行就尽可能简单了。

关于python - 获取子集中元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51584535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com