在python中查找列表中唯一元素的索引?

在python中查找列表中唯一元素的索引?,python,list,indexing,Python,List,Indexing,我有这样一份清单: l=[1,2,2,3,4,5,5,5] indexes = [l.index(x) for x in sorted(set(l))] 我们可以看到,该列表包含5个唯一值和8个总值 我想要列表格式的列表中唯一值的索引 因此,输出如下所示: indexes=[0,1,3,4,5] 如何以最有效的方式使用python?如果这不是熊猫特有的问题,而l只是一个简单的旧列表,我会检查它,并保持从值到包含它的第一个索引的有序映射。然后,可以返回贴图值: from collection

我有这样一份清单:

l=[1,2,2,3,4,5,5,5]
indexes = [l.index(x) for x in sorted(set(l))]
我们可以看到,该列表包含5个唯一值和8个总值

我想要列表格式的列表中唯一值的索引

因此,输出如下所示:

indexes=[0,1,3,4,5]

如何以最有效的方式使用python?

如果这不是熊猫特有的问题,而l只是一个简单的旧列表,我会检查它,并保持从值到包含它的第一个索引的有序映射。然后,可以返回贴图值:

from collections import OrderedDict
def get_unique_indexes(l):
    # OrdedDict is used to preserve the order of the indexes
    result = OrderedDict()
    for i in range(0, len(l)):
        val = l[i]
        if not val in result:
            result[val] = i

    return result.values()

如果这不是一个特定的问题,而l只是一个简单的旧列表,我会检查它,并保留一个从值到包含它的第一个索引的有序映射。然后,可以返回贴图值:

from collections import OrderedDict
def get_unique_indexes(l):
    # OrdedDict is used to preserve the order of the indexes
    result = OrderedDict()
    for i in range(0, len(l)):
        val = l[i]
        if not val in result:
            result[val] = i

    return result.values()

您只需遍历列表即可。第一次看到某个项目时,将其添加到一个集合中,表示已看到该项目,并将编号添加到结果列表中。跳过其他的。这将保持索引在列表中第一次看到项目的顺序:

def uniqueIndexes(l):
    seen = set()
    res = []
    for i, n in enumerate(l):
        if n not in seen:
            res.append(i)
            seen.add(n)
    return res

l=[1,2,2,3,4,5,5,5,2]

uniqueIndexes(l)
结果:


您只需遍历列表即可。第一次看到某个项目时,将其添加到一个集合中,表示已看到该项目,并将编号添加到结果列表中。跳过其他的。这将保持索引在列表中第一次看到项目的顺序:

def uniqueIndexes(l):
    seen = set()
    res = []
    for i, n in enumerate(l):
        if n not in seen:
            res.append(i)
            seen.add(n)
    return res

l=[1,2,2,3,4,5,5,5,2]

uniqueIndexes(l)
结果:


您可以为此使用内置类型

代码

l=[1,2,2,3,4,5,5,5] 索引=[l.indexx代表集合中的x] 解释

列表中所有唯一的成员。 返回元素的第一个索引。 评论

正如注释中指出的,如果顺序对您很重要,您可以根据所提供的数据,使用集合上的排序或结果索引列表上的排序。如果数据已经排序,我建议这样做:

l=[1,2,2,3,4,5,5,5]
indexes = [l.index(x) for x in sorted(set(l))]

您可以为此使用内置类型

代码

l=[1,2,2,3,4,5,5,5] 索引=[l.indexx代表集合中的x] 解释

列表中所有唯一的成员。 返回元素的第一个索引。 评论

正如注释中指出的,如果顺序对您很重要,您可以根据所提供的数据,使用集合上的排序或结果索引列表上的排序。如果数据已经排序,我建议这样做:

l=[1,2,2,3,4,5,5,5]
indexes = [l.index(x) for x in sorted(set(l))]
可以这样做:

l=[1,2,2,3,4,5,5,5] # Your list
indexes=[] # Your output list
for elem in set(l):
       indexes.append(l.index(elem))
在for循环中,将获取集合的每个元素,并使用list.index方法获取列表中元素的索引,该方法返回所需类型的第一个元素的索引,并将值插入到索引列表中

这就是它的工作原理。我想解释一下,所以请为我的长篇大论道歉

谢谢。

这可以通过以下方式完成:

l=[1,2,2,3,4,5,5,5] # Your list
indexes=[] # Your output list
for elem in set(l):
       indexes.append(l.index(elem))
在for循环中,将获取集合的每个元素,并使用list.index方法获取列表中元素的索引,该方法返回所需类型的第一个元素的索引,并将值插入到索引列表中

这就是它的工作原理。我想解释一下,所以请为我的长篇大论道歉

谢谢。

为什么没有人在这里提到np.unique

import numpy as np
np.unique([1,6,6,2,2,3,4,5,5,5], return_index=True)

>>> (array([1, 2, 3, 4, 5, 6]), array([0, 3, 5, 6, 7, 1], dtype=int64))
第一个数组包含排序后的唯一值,如果return\u index设置为True,则返回的第二个数组是第一次出现的索引列表

为什么这里没有人提到np.unique

import numpy as np
np.unique([1,6,6,2,2,3,4,5,5,5], return_index=True)

>>> (array([1, 2, 3, 4, 5, 6]), array([0, 3, 5, 6, 7, 1], dtype=int64))

第一个数组包含排序后的唯一值,如果return\u index设置为True,则返回的第二个数组是第一次出现的索引列表

如果这是pandas系列,只需执行pd.Seriesl.drop\u duplicates.index,否则如果这是一个列表,则不需要pandas,l.index[~l.duplicated]l是一个序列吗?这是一个特别的问题?它被贴上了熊猫的标签,但问题中没有具体的熊猫。你解决这个问题的方法是什么?代码的具体问题是什么?你的房间在哪里?您尝试了什么?请发布您试图解决问题的代码。如果这是一个熊猫系列,只需执行pd.Seriesl.drop_duplicates.index,否则如果这是一个列表,您不需要熊猫,l.index[~l.duplicated]l是一个系列吗?这是一个熊猫问题吗?它被贴上了熊猫的标签,但问题中没有具体的熊猫。你解决这个问题的方法是什么?代码的具体问题是什么?你的房间在哪里?您尝试了什么?请发布您试图解决问题的代码。在当前状态下,您的问题显示没有任何效果。index将返回第一个occuranceRight的位置,@mamun但setl会按顺序迭代项目吗?是的,这是真的。他需要稍后执行排序以获得正确的索引顺序,或者需要有更好的方法。@MarkMeyer OP没有指定它,但我们可以使用sorted使索引按顺序排列@mamun s.indexx=在s-from索引中第一次出现的x的索引将返回第一次出现的正确位置,@mamun但是会按顺序设置迭代项吗?是的,这是真的。他需要稍后执行排序以获得正确的索引顺序,或者
re需要更好的方式。@MarkMeyer它不是由OP指定的,但我们可以使用sorted按顺序排列索引@mamun s.indexx=s-from中第一次出现的x的索引I将用于enumeratel:带len的范围中的I,val。我将用于enumeratel:带len的范围中的I,val。