我想知道他们是否可以在列表中查看类似的值。所以我可以说,如果列表的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)
答案 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)])