[3, 3, 3, 4, 4, 2]
Would be:
[ (3, 3), (4, 2), (2, 1) ]
The output should be sorted by highest count first to lowest count. In this case, 3 to 2 to 1.
[3, 3, 3, 4, 4, 2]
Would be:
[ (3, 3), (4, 2), (2, 1) ]
The output should be sorted by highest count first to lowest count. In this case, 3 to 2 to 1.
data = [3, 3, 3, 4, 4, 2]
result = []
for entry in set(data):
result.append((entry, data.count(entry)))
result.sort(key = lambda x: -x[1])
print result
>>[(3, 3), (4, 2), (2, 1)]
print sorted(result, key=lambda x: -x[1])
instead of print result
–
Stoneham result = sorted(result, key = lambda x: -x[1])
can be written as result.sort(key = lambda x: -x[1])
–
Stoneham result
as an empty list and using a for loop with append
, one can use list comprehension: result = [(entry, data.count(entry)) for entry in set(data)]
(cf. docs.python.org/2/tutorial/datastructures.html, section 5.1.4). –
Luannaluanne You can use a Counter in Python 2.7+ (this recipe works on 2.5+):
from collections import Counter
print Counter([3, 3, 3, 4, 4, 2]).most_common()
# [(3, 3), (4, 2), (2, 1)]
data = [3, 3, 3, 4, 4, 2]
result = []
for entry in set(data):
result.append((entry, data.count(entry)))
result.sort(key = lambda x: -x[1])
print result
>>[(3, 3), (4, 2), (2, 1)]
print sorted(result, key=lambda x: -x[1])
instead of print result
–
Stoneham result = sorted(result, key = lambda x: -x[1])
can be written as result.sort(key = lambda x: -x[1])
–
Stoneham result
as an empty list and using a for loop with append
, one can use list comprehension: result = [(entry, data.count(entry)) for entry in set(data)]
(cf. docs.python.org/2/tutorial/datastructures.html, section 5.1.4). –
Luannaluanne Try using a collections.Counter:
from collections import Counter
data = [3,4,2,3,4,3]
Counter(data).most_common()
Why would you choose an O(n**2) algorithm to do this. The alternative to Counter (if you have <2.7) is not too difficult
>>> from operator import itemgetter
>>> from collections import defaultdict
>>> L=[3, 3, 3, 4, 4, 2]
>>> D=defaultdict(int)
>>> for i in L:
... D[i]+=1
...
>>> sorted(D.items(), key=itemgetter(1), reverse=True)
[(3, 3), (4, 2), (2, 1)]
def myfun(x,y):
return x[1]-y[1]
list1 = [3, 3, 3, 4, 4, 2]
s1 = set(list1)
newlist = []
for e in s1:
newlist.append((e,list1.count(e)))
print sorted(newlist,cmp=myfun)
I think, this is what you asked for. Sorry for hurry with the first answer. But just note that cmp
argument for sorted is not available in python3
© 2022 - 2024 — McMap. All rights reserved.
[3,4,2,3,4,3]
and expect the same output? Does the order of the output list matter in any way? – Verisimilitudefreq_sorted([3, 3, 3, 4, 4, 2], include_freq=True)
gives the exact result you ask for. – Haemocyte