I have a list of tuples that looks something like this:
my_list = [(1,12),(12,1),(12,1),(20,15),(7,8),(15,20)]
I want to get a count of the num
You can use collections.Counter
, normalizing your elements with sorted
first.
from collections import Counter
lst = [(1,12),(12,1),(12,1),(20,15),(7,8),(15,20)]
count = Counter(tuple(sorted(t)) for t in lst)
# output: Counter({(1, 12): 3, (15, 20): 2, (7, 8): 1})
You can then print like so.
for value, amount in count.items():
print(value, '=', amount)
# Prints:
# (1, 12) = 3
# (15, 20) = 2
# (7, 8) = 1
You can try simple approach without importing anything like this:
my_list = [(1,12),(12,1),(12,1),(20,15),(7,8),(15,20)]
count={}
for i in my_list:
if tuple(sorted(i)) not in count:
count[tuple(sorted(i))]=1
else:
count[tuple(sorted(i))]+=1
print(count)
output:
{(15, 20): 2, (7, 8): 1, (1, 12): 3}
First you can sort your list
lst2 = [tuple(sorted(i)) for i in lst]
Then you can use set()
to find the unique values in this list and count their occurence.
count = {}
for i in set(lst2):
num = len([1 for j in lst2 if j == i])
count.update({i:num})
print(count)
{(1, 12): 3, (7, 8): 1, (15, 20): 2}
You can swap all positions by size and then use collections.counter
:
from collections import Counter
l = [(1,12),(12,1),(12,1),(20,15),(7,8),(15,20)]
new_l = Counter([[(b, a), (a, b)][a < b] for a, b in l])
for a, b in new_l.items():
print('{},{}:{}'.format(*(list(a)+[b])))
Output:
15,20:2
7,8:1
1,12:3