Get count of tuples in list regardless of elements orders

前端 未结 4 1733
你的背包
你的背包 2021-01-24 08:31

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

相关标签:
4条回答
  • 2021-01-24 09:01

    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
    
    0 讨论(0)
  • 2021-01-24 09:02

    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}
    
    0 讨论(0)
  • 2021-01-24 09:11

    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}

    0 讨论(0)
  • 2021-01-24 09:15

    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
    
    0 讨论(0)
提交回复
热议问题