我有一个这样的列表:
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最有效的方法?
答案 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的每个元素,并获取列表中元素的索引。值插入索引列表。
这是它的工作方式。(我想解释一下,因此冗长的文字表示歉意!)
谢谢。