Python 获取子集中元素的索引
我有一个列表和它的一个子集,我想找到子集中每个元素的索引。我目前已尝试此代码:Python 获取子集中元素的索引,python,python-2.7,Python,Python 2.7,我有一个列表和它的一个子集,我想找到子集中每个元素的索引。我目前已尝试此代码: 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 li
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']
当我将转换为index(list1,list2)
时,我希望发生的是输出为[2,0,1]
然而,当我这样做时,我得到一个ValueError:“0”
不在列表中
但是,0在这两个列表中都没有出现,因此我不确定为什么会出现这种情况
其次,如果我有一个列表列表,我想处理大列表中的所有嵌套列表,我会这样做吗
for smalllist in biglist:
smalllist[:] = [dict_of_indices[x] for x in smalllist]
其中,
dict\u of\u index
是根据最上面的答案创建的索引字典。问题在于,你不是一次一次地这样做,而是一次又一次地这样做,N次:
for i in range(len(listof_elements)):
listof_elements[:] = [listof_indices.index(x) for x in listof_elements]
第一次通过,您将listof_elements
中的每个值替换为listof_index
中的索引。到目前为止,一切顺利。事实上,你应该在那里完成
但是你再做一次。您可以在listof_index
中查找这些索引,就像它们是值一样。有些人不在那里。所以你得到了一个错误
您只需删除外部循环即可解决此问题。第一次之后,你已经完成了
您可能会感到困惑,因为这个问题似乎天生就需要两个循环,但您已经有了两个循环。第一个是列表理解中显而易见的一个,第二个是隐藏在listof_index.index
中的一个
虽然我们正在解决这个问题:虽然这个问题确实需要两个循环,但它不需要嵌套它们 您可以预先循环查找每个
x
,以构建字典,而不是循环查找listof_索引
:
dict_of_indices = {value: index for index, value in enumerate(listof_indices)}
listof_elements[:] = [dict_of_indices[x] for x in listof_elements]
然后直接在字典中查找:
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)
time而不是O(N*M)
),我认为这可能更容易理解和调试。第一行可能有点棘手,但您可以轻松打印出dict并验证它是否正确。然后第二行是你能得到的最简单的东西。你能举例说明你想要什么吗?如何显示元素列表、索引列表以及你想要返回的内容?根据我的理解,你的输出应该是[1,2,0]
,而不是[2,0,1]
。我说的对吗?哇,就是这么简单的哈哈。很有道理,谢谢你!还有一个问题:如果我有一个列表列表,我想要另一个列表列表,对大列表中的每个列表都执行此操作,那么我就必须使用for循环,对吗?类似于biglist中的smalllist:smalllist[:]=[dict_of_index[x]for x in smalllist]@user5145575是的,没错。(除了不生成其他列表外,它正在修改现有列表。这是您想要的吗?)