2

可以说,我有一个浮动列表,它们非常相似,即

alpha = [11.2876,11.2895,1.9746]

其中两个元素等于np.round(x,2)。如何从此列表中获取信息,即两个元素具有相同的值,np.round(x,2)11.28和一个具有值1.9746

4

3 回答 3

4

不确定您期望什么输出,但一个想法可能是使用集合?

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})
于 2019-11-18T13:34:13.670 回答
3

您可以将其转换并检查,

>>> 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
于 2019-11-18T13:35:52.923 回答
0

您可以创建一个矩阵/字典,该矩阵/字典由数组的条目索引,并根据它们的绝对距离TrueFalse根据它们的绝对距离进行估值。

这样做的代码是

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}
于 2019-11-18T13:37:33.330 回答