喜的Python用戶,Python中的集合模塊行爲奇怪嗎?
我不是100%肯定,但它似乎有在蟒蛇的錯誤功能collections.Counter()
這是collections
模塊中的一部分。函數collections.Counter()
應計算列表中數字的出現次數,換句話說,它應該確定列表(矢量)中數字的出現頻率。如果這些數字是浮點數或整數,這應該不重要。在很多場合它正常但不是做這項工作始終,這裏是當它不能給出正確答案的例子:
import numpy as np
from itertools import groupby
import collections
import matplotlib.pyplot as plt
data_1=[250, 250, 251, 251, 251, 251, 252, 252, 252, 252, 253, 253, 253, 253, 254, 254, 254, 254, 254]
data_2=[250, 250, 251, 251, 251, 251, 252, 252, 252, 252, 253, 253, 253, 253, 254, 254, 254, 254, 254, 255, 256, 256]
# Determine no. of repetitions for the sweeped wavelengths
d2=collections.Counter(data_1) # BUG in the collections module for data_2 but NOT for data_1
d3=d2.values()
print d3
data_1
名單上使用collections.Counter
將給出正確的答案(D3)的所有事件:
[2, 4, 4, 4, 5]
但是,如果我在data_2
申請collections.Counter
我得到以下答案(D3):
[2, 2, 4, 4, 4, 5, 1]
這是WR翁。它應該是[2, 4, 4, 4, 5, 1, 2]
。看起來像collections.Counter()
交換了一些元素,但我找不到任何合理的解釋,爲什麼它這樣做。順便說一句。我正在使用Python 2.7.5
對此有什麼意見?
PS1:字典功能dict((i,data_2.count(i)) for i in data_2)
對於data_2
給出與collections.Counter(data_2)
相同的錯誤答案。
PS2:該解決似乎是從itertools
模塊groupby
功能:
from itertools import groupby
d3=[len(list(group)) for key, group in groupby(data_2)]
道德:總是假設的錯誤更可能是你的比你正在使用的語言。 – 2014-10-17 14:45:32
感謝您的評論凱文:-) data_2.count()函數工作正常,但字典似乎隨機命令輸出元素和尊重值,如你所說。 – Commi 2014-10-17 14:51:07
親愛的零比雷埃夫斯,我沒有犯錯。嘗試編譯我的代碼並查看。 – Commi 2014-10-17 14:54:43