2011-12-05 145 views
1

我在想,如果他们是一种在列表中查看类似值的方法。所以我可以说,如果列表中的2个数字是相同的值打印该数字。感谢您的帮助查看列表中的值是否具有相同的值〜Python

编辑: 我想知道这是否会工作

a = [] 
v = 0 
while v == 1: 
    n = x - (func1sub/func1dsub) 
    a.append(n) 
print (a) 

d = defaultdict(int) 
for v in a: 
    d[v] += 1 
print (v) 
+0

你试过了吗? '而v == 1:'将失败,因为'v'没有被定义... – dhg

+0

他们会以某种方式找到数字在哪里彼此接近?所以它会说,如果列表中的2个数字是.0001的差异打印该数字? – Shantanu

回答

2

你想要的就是所谓的直方图。有了直方图之后,打印满足条件的数字很容易。

有几种创建直方图的方法。让我们假设我们定义这个名单:如果您的Python> = 2.5,则可以使用defaultdict()简化环路这两行

list_ = [1,1,2,3,4,4,4,5,6] 

用手

histogram = {} 
for i in list_: 
    oldfreq = histogram.get(i, 0) # get the old number of times we've seen i, or 0 if we haven't seen it yet 
    histogram[i] = oldfreq+1 # add one to the old count 

defaultdict

from collections import defaultdict 
histogram = defaultdict(int) # this means, "if we haven't seen a number before, set its default value to the result of int(), which is 0 
for i in list_: 
    histogram[i] += 1 

如果你的Python> = 2.7,则可以使用Counter,对于直方图制作这是特制

计数器

from collections import Counter 
histogram = Counter(list_) 

现在,你有你的直方图,可以过滤它来获得只有那些不止一次出现的数字。

twoormore = [n for n,freq in histogram.iteritems() if freq > 1] 

print twoormore 
1

这里是我的变种:

In [12]: a = [1,1,2,3,4] 

In [13]: z = set([(val,a.count(val)) for val in a]) 

In [14]: z 
Out[14]: set([(1, 2), (3, 1), (4, 1), (2, 1)]) 
+0

对不起,我真的不知道这是干什么,我想看看列表中的数字是否与列表中的另一个数字相同,因此某些函数会发现它们是数字1的多个实例,因此打印1 – Shantanu

+0

This用值和创建次数创建一个元组。通过这种方式,您可以检查出现次数大于1的所有组合。 – Geo

2
>>> from collections import defaultdict 
>>> l = [1,2,2,3] 
>>> d = defaultdict(int) 
>>> for v in l: 
... d[v] += 1 
... 
>>> d 
defaultdict(<type 'int'>, {1: 1, 2: 2, 3: 1}) 
>>> [v for (v,c) in d.iteritems() if c > 1] 
[2] 

所以2是多次出现的唯一值。

请注意,此方法的时间复杂性是线性的,因为它只需遍历列表一次构建字典。对列表中的每个项目调用count将是二次方时间。

+0

基于字典的解决方案假定列表项是可哈希的,这对数字来说不是问题(如Shantanu的问题),但是需要注意的重要的。另外,'collections.Counter'会更容易。 – kindall

+0

你可以看看我贴的代码吗?谢谢 – Shantanu

相关问题