看看列表中的值是否具有相同的值~Python

时间:2011-12-05 06:19:28

标签: python list

我想知道他们是否可以在列表中查看类似的值。所以我可以说,如果列表的2个数字具有相同的值,则打印该数字。谢谢你的帮助

编辑: 我想知道这是否有用

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)

3 个答案:

答案 0 :(得分: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将是二次时间。

答案 1 :(得分:2)

您想要的是直方图。在得到直方图后,打印满足您条件的数字很容易。

有几种方法可以创建直方图。让我们假设我们已经定义了这个列表:

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

如果你有Python&gt; = 2.5,你可以使用defaultdict()来简化循环中的这两行

<强> 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&gt; = 2.7,你可以使用Counter,这是专为直方图创建而设的

<强>计数器

from collections import Counter
histogram = Counter(list_)

现在您已经拥有了直方图,您可以对其进行过滤以仅获得多次出现的数字。

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

print twoormore

答案 2 :(得分: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)])