python - 在列表中查找与其他元素不同的元素的最pythonic方法是什么?

标签 python

假设我们有一个大小未知的列表,列表中有一个元素与其他元素不同,但我们不知道该元素的索引。该列表仅包含数字,并且是从远程服务器获取的,并且每次都会更改列表的长度和不同元素的索引。找到不同元素的最pythonic方法是什么? 我试过了,但我不确定这是否是最佳解决方案。

a = 1
different_element = None
my_list = fetch_list()

b = my_list[0] - a

for elem in my_list[1::]:
    if elem - a != b:
        different_element = elem

print(different_element)

最佳答案

这是 numpy 的一个很好的用途

给定一些随机统一列表,其中包含一个唯一不同的数字:

>>> li=[1]*100+[200]+[1]*250

如果统一值已知(在本例中为 1,未知值为 200),您可以在数组上使用 np.where 来获取该值:

>>> import numpy as np
>>> a=np.array(li)
>>> a[a!=1]
array([200])

如果统一值未知,您可以使用 np.uniques 获取唯一值的计数:

>>> np.unique(a, return_counts=True)
(array([  1, 200]), array([350,   1]))

对于纯 Python 解决方案,使用带有 next 的生成器来获取与所有其他值不同的第一个值:

>>> next(e for i, e in enumerate(li) if li[i]!=1)
200

或者,您可以使用 dropwhile来自 itertools:

>>> from itertools import dropwhile
>>> next(dropwhile(lambda e: e==1, li))
200

如果您不知道统一值是什么,请在足够大的切片上使用计数器来获取它:

>>> uniform=Counter(li[0:3]).most_common()[0][0]
>>> uniform
1
>>> next(e for i, e in enumerate(li) if li[i]!=uniform)
200

在这些情况下,next 将在满足条件的第一个值处短路。

关于python - 在列表中查找与其他元素不同的元素的最pythonic方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39751945/

相关文章:

python - 检查特定字符串是否出现在另一个字符串中

python - 从 fabric 调用/etc/sudoers 命令

python - 使用字典将月份数字转换为月份名称的基本 Python 编程

python - Python 中多处理模块的池和队列问题

python - 如何在 Beautifulsoup 的 find_all() 函数中过滤没有属性的标签?

python - 将 numpy.ndarray 值从字节转换为 float

python - 使用从 SimpleNamespace 派生的类的 pickle.load 上的 TypeError

python - 从 Python 中的 imagemagick 子进程读取输出

python - 图.transFigure.transform() : lines in figure coordinates do not scale with the figure

python - 如何播放声音一次,但不仅仅是一次?