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

时间:2019-07-01 06:39:11

标签: python list indexing

我有一个这样的列表:

public IHttpActionResult BadRequest<T>(T obj)
{
    return Content(HttpStatusCode.BadRequest, obj);
}

public IHttpActionResult Action()
{
    // do whatever validation here.
    var validationResult = Validate();

    // then return a bad request
    return BadRequest(validationResult);
}

我们可以看到列表包含5个唯一值和8个总计值。

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

所以输出看起来像:

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

如何使用python最有效的方法?

5 个答案:

答案 0 :(得分:3)

为什么这里没有人提到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_index设置为True则返回)是第一个数组的索引列表发生

答案 1 :(得分:0)

如果这不是熊猫特有的问题,并且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()

答案 2 :(得分:0)

您可以仅遍历列表。第一次看到项目时,将其添加到表明已被查看的项目集中,然后将数字添加到结果列表中。跳过其他人。这将使索引保持在列表中首次显示该项的顺序:

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)

结果:

[0, 1, 3, 4, 5]

答案 3 :(得分:0)

您可以为此使用内置类型。

代码

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

indexes = [l.index(x) for x in set(l)]

EXPLANATION

  • set
    列表中的所有唯一成员。
  • list.index
    返回元素的第一个索引。

评论

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

indexes = [l.index(x) for x in sorted(set(l))]

答案 4 :(得分:0)

这可以做到:

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()方法(返回所需类型的第一个元素的索引)和set的每个元素,并获取列表中元素的索引。值插入索引列表。

这是它的工作方式。(我想解释一下,因此冗长的文字表示歉意!)

谢谢。