Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较列表元素并计算结果值的频率_Python_List_Numpy - Fatal编程技术网

Python 比较列表元素并计算结果值的频率

Python 比较列表元素并计算结果值的频率,python,list,numpy,Python,List,Numpy,比如说,我有一个非常相似的浮动列表,即 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} 或者是一个计数器 from collections import Coun

比如说,我有一个非常相似的浮动列表,即

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}
或者是一个
计数器

from collections import Counter
Counter(round(i, 2) for i in alpha)
# Counter({11.29: 2, 1.97: 1})
如果您确实想将
下限
设置为第二个小数点:

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
>>> 

您可以创建一个矩阵/字典,该矩阵/字典由数组的条目索引,并根据其绝对距离按
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}

但是接下来你会丢失信息,最初有两个相同值的元素,OP似乎对此感兴趣。编辑:计数器解决方案确实保留了信息。是的,那么计数器就更好了@tom
{(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}