如何在列表中找到项目与上一项目不同的位置?

时间:2016-09-18 05:26:53

标签: python

l1 = [1,2,2,2]

在上面的列表中,我知道元素在l1 [0]中有所不同。有没有办法在python中找到这个位置?

5 个答案:

答案 0 :(得分:2)

试试这个:

l1.index(min(set(l1), key=l1.count))

编辑:

lambda表达式min(set(l1), key=l1.count)告诉我们列表中出现次数最少的元素是什么。然后我们使用l1.index来计算列表中该元素的位置。

答案 1 :(得分:1)

import numpy as np
UniqueList, indices = np.unique(l1, return_inverse=True)
print(UniqueList) #Unique elements in List l1

数组([1,2])

print(indices)  #indices of element in l1 mapped to UniqueList

数组([0,1,1,1])

答案 2 :(得分:0)

试试这个:

l1 = [1,2,2,2]

for pos, i in enumerate(l1):
    if l1.count(i)==1:      
        print pos

答案 3 :(得分:0)

假设您需要显示项目更改的 所有 出现的索引:

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

changes = [i for i, n in list(enumerate(l))[1:] if l[i] != l[i-1]]

print(changes)
> [1, 3, 5]

这只是将列表中的每个项目与前一项目进行比较,列出元素不同的位置。

答案 4 :(得分:0)

使用itertools食谱unique_everseen的修改来获取跟踪列表中新条目的解决方案。

from itertools import ifilterfalse
def unique_everseen(iterable, key=None, per_index=False):
    "List unique elements, preserving order. Remember all elements ever seen. 
    Use per_index=True to return indices instead of elements."
    # unique_everseen('AAAABBBCCDAABBB') --> A B C D
    # unique_everseen('ABBCcAD', str.lower) --> A B C D
    # unique_everseen('ABBCcAD', str.lower, True) --> 0 1 3 6
    seen = set()
    seen_add = seen.add
    if key is None:
        for index, element in enumerate(ifilterfalse(seen.__contains__, iterable)):
            seen_add(element)
            yield element if not per_index else index
    else:
        for index, element in enumerate(iterable):
            k = key(element)
            if k not in seen:
                seen_add(k)
                yield element if not per_index else index

试试你的例子:

list(unique_everseen(l1, per_index=True)) # returns [0, 1]