Python 查找与列表中下一个元素不同的元素位置

Python 查找与列表中下一个元素不同的元素位置,python,python-2.7,list,numpy,Python,Python 2.7,List,Numpy,我想要元素在列表中与下一个元素不同的位置 nums = np.array(["cat","cat","dog","dog","dog","goldfish","bee","bee","cat","cat"]) 所以我在列表中使用zip和enumerate print [c for a,b,c in zip(nums, nums[1:],enumerate(nums)) if a != b] [(1, 'cat'), (4, 'dog'), (5, 'goldfish'), (7, 'bee')

我想要元素在列表中与下一个元素不同的位置

nums = np.array(["cat","cat","dog","dog","dog","goldfish","bee","bee","cat","cat"])
所以我在列表中使用zip和enumerate

print [c for a,b,c in zip(nums, nums[1:],enumerate(nums)) if a != b]
[(1, 'cat'), (4, 'dog'), (5, 'goldfish'), (7, 'bee')]
我只想要这个职位

>>[1,4,5,7]

如何删除这里的元组?或者有更好的(更快的)方法来获取列表中不同元素的位置吗?

只需比较1偏移的切片并获得不匹配的索引-

np.flatnonzero(nums[1:] != nums[:-1])

如果您正在寻找numpy解决方案:

In [19]: a = ["cat","cat","dog","dog","dog","goldfish","bee","bee","cat","cat"]

In [20]: [x for x in range(len(a)-1) if a[x] != a[x+1]]
Out[20]: [1, 4, 5, 7]

print[c[0]…]
会很好地解决这个问题。
[i for i,j in enumerate(nums[:-1])如果nums[i]!=nums[i+1]
numpython与常规Python有不同的解析吗?我假设
nums[1:]!=nums[:-1]
在被传递到
np.flatnonzero()
之前将求值为
False
。回答我自己:
np.array.\uu_______
返回一个函数供以后求值,而不是bool.@KirkStrauser很好,因为输入是一个数组,
nums[1:]!=nums[:-1]
也将是一个数组,因为它将执行元素级比较,然后
flatnonzero
将拾取与真值对应的索引。现在,
nums[1:]!=nums[:-1]
nums
作为一个列表,只给我们一个标量,这将是我认为的任何输出的减少。因此,在示例中,如果
nums
是一个列表,那么它将只是一个标量True。不确定这是否回答了你的问题。是的,谢谢!我很少使用numpy,所以乍一看我不是这么想的。