可以说,我有一个浮动列表,它们非常相似,即
alpha = [11.2876,11.2895,1.9746]
其中两个元素等于np.round(x,2)。如何从此列表中获取信息,即两个元素具有相同的值,np.round(x,2)即11.28和一个具有值1.9746。
不确定您期望什么输出,但一个想法可能是使用集合?
set([round(i, 2) for i in alpha])
# {1.97, 11.29}
或者也许是一个Counter?
from collections import Counter
Counter(round(i, 2) for i in alpha)
# Counter({11.29: 2, 1.97: 1})
如果你真的想要floor小数点后第二位:
import math
Counter(math.floor(i * 100)/100.0 for i in alpha)
# Counter({11.28: 2, 1.97: 1})
您可以将其转换并检查,
>>> alpha = [11.2876,11.2895,1.9746]
>>> import numpy as np
>>> from collections import Counter
>>> c = Counter(np.round(x,2) for x in alpha)
>>> c
Counter({11.29: 2, 1.97: 1})
>>> next(k for k,v in c.items() if v == 2)
11.29
但是,如果您要寻找的计数没有价值,那么它可能会提高StopIteration。
>>> next(k for k,v in c.items() if v == 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
如果你不希望它提高 aStopIteration如果它无法通过该计数找到任何值,那么,
>>> k = next((k for k,v in c.items() if v == 3), None)
>>> k
>>> if k is None:
... print('Not found')
...
Not found
您可以创建一个矩阵/字典,该矩阵/字典由数组的条目索引,并根据它们的绝对距离True或False根据它们的绝对距离进行估值。
这样做的代码是
equal_mtx = {}
for i in range(len(alpha)):
for j in range(len(alpha)):
equal_mtx[(alpha[i],alpha[j])] = equal_mtx.get((alpha[j],alpha[i]), (np.round(np.abs(alpha[i]-alpha[j]), 2)) == 0)
'equal_mtx' 的结果是
{(11.2876, 11.2876): True,
(11.2876, 11.2895): True,
(11.2876, 1.9746): False,
(11.2895, 11.2876): True,
(11.2895, 11.2895): True,
(11.2895, 1.9746): False,
(1.9746, 11.2876): False,
(1.9746, 11.2895): False,
(1.9746, 1.9746): True}