l1 = [1,2,2,2]
在上面的列表中,我知道元素在l1 [0]中有所不同。有没有办法在python中找到这个位置?
答案 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]