我有一個多維列表,像下面在多維列表中計算相同列表的發生頻率?
multilist = [[1,2],[3,4,5],[3,4,5],[5,6],[5,6],[5,6]]
我怎樣才能得到如下效果快:
[1,2]: count 1 times
[3,4,5]: count 2 times
[5,6]: count 3 times
,並也得到了獨特的多維表(刪除重複項):
multi_list = [[1,2],[3,4,5],[5,6]]
非常感謝。
我有一個多維列表,像下面在多維列表中計算相同列表的發生頻率?
multilist = [[1,2],[3,4,5],[3,4,5],[5,6],[5,6],[5,6]]
我怎樣才能得到如下效果快:
[1,2]: count 1 times
[3,4,5]: count 2 times
[5,6]: count 3 times
,並也得到了獨特的多維表(刪除重複項):
multi_list = [[1,2],[3,4,5],[5,6]]
非常感謝。
您可以使用元組,其是可哈希和collections.Counter
:
>>> multilist = [[1,2],[3,4,5],[3,4,5],[5,6],[5,6],[5,6]]
>>> multituples = [tuple(l) for l in multilist]
>>> from collections import Counter
>>> tc = Counter(multituples)
>>> tc
Counter({(5, 6): 3, (3, 4, 5): 2, (1, 2): 1})
要獲得元素的集合,你只需要按鍵:
>>> tc.keys()
dict_keys([(1, 2), (3, 4, 5), (5, 6)])
你可以嘗試這樣的,
>>> multilist = [[1,2],[3,4,5],[3,4,5],[5,6],[5,6],[5,6]]
>>> c = [multilist.count(l) for l in multilist]
>>> for ind, l in enumerate(multilist):
... print("%s: count %d times" % (str(l), c[ind]))
...
[1, 2]: count 1 times
[3, 4, 5]: count 2 times
[3, 4, 5]: count 2 times
[5, 6]: count 3 times
[5, 6]: count 3 times
[5, 6]: count 3 times
>>> {str(item): multilist.count(item) for item in multilist }
{'[1, 2]': 1, '[3, 4, 5]': 2, '[5, 6]': 3}
這只是(種)一半的問題。 –
非常感謝,就像你回答,但它是不夠的...它可以報告像字典:{'[1,2]':1,'[3,4,5]':2,'' [5,6]':3} –
@ChrinideWu已更新 –
As @Reu tSharabani建議,你可以使用元組作爲字典鍵,然後轉換回列表進行顯示。下面的代碼不回覆collections
(不是說有什麼問題)。
multilist = [[1,2],[3,4,5],[3,4,5],[5,6],[5,6],[5,6]]
histogram = {}
for x in multilist:
xt = tuple(x)
if xt not in histogram:
histogram[xt] = 1
else:
histogram[xt] += 1
for k,c in histogram.items():
print "%r: count %d times" % (list(k),c)
print [list(x) for x in histogram.keys()]
感謝您的代碼^ _^ –
您可以使用字典這個
count_data = {}
for my_list in multilist:
count_data.setdefault(tuple(my_list), 0)
count_data[tuple(my_list)] += 1
這並沒有解決整個問題。此外,提供關於爲什麼和/或如何代碼回答問題的其他內容可以提高其長期價值。 –
如果你想保證的唯一項目的順序是一樣的,在最初的名單,你可以這樣做:
>>> class Seen(set):
... def __contains__(self, item):
... res = super(Seen, self).__contains__(item)
... self.add(item)
... return res
...
>>> seen = Seen()
>>> [item for item in multilist if tuple(item) not in seen]
[[1, 2], [3, 4, 5], [5, 6]]
>>>
非常好!謝謝, –
如何使用repr(alist)將其轉換爲其文本字符串表示形式?
from collections import defaultdict
d = defaultdict(int)
for e in multilist: d[ repr(e)] += 1
for k,v in d.items(): print "{0}: count {1} times".format(k,v)
只是好奇,你有沒有嘗試過嗎?完成任何研究? –
您是否嘗試過某些東西,或者您要求我們做功課? – Hearner
'map(list,set(map(tuple,multilist)))'? – thebjorn