如何在python中创建多集数据结构

Sha*_*lal -3 set multiset python-3.x

我试图解决一些hackerrank问题,我遇到了一个与multiset相关的问题。我试过这段代码,但我有点困惑我在哪一点上犯了错误?

class Multiset:
    def __init__(self):
        self.items=[]

    def add(self, val):
        # adds one occurrence of val from the multiset, if any
        self.items.append(val)
    

    def remove(self, val):
        # removes one occurrence of val from the multiset, if any
        if len(self.items):
            if val in self.items:
                self.items.remove(val)

    def __contains__(self, val):
        if val in self.items:
            return True
        return False
        
    
    def __len__(self):
        # returns the number of elements in the multiset
        return len(self.items)

if __name__ == '__main__':

Run Code Online (Sandbox Code Playgroud)

小智 5

关于您的代码 .add 是带有列表的无效语法,此处应使用 .append ,并且在删除之前我们必须检查 val 是否已存在于列表中。如果它存在,那么只有我们应该删除它。

#!/bin/python3

import math
import os
import random
import re
import sys


class Multiset:
    def __init__(self):
        self.items = []
    def add(self, val):
        #adds one occurrence of val from the multiset, if any
        return self.items.append(val)
        pass
    def remove(self, val):
        # removes one occurrence of val from the multiset, if any
        if self.items.count(val) != 0:
            return self.items.remove(val)
        pass
    def __contains__(self, val):
        # returns True when val is in the multiset, else returns False
        return val in self.items
    def __len__(self):
        # returns the number of elements in the multiset
        return len(self.items)
if __name__ == '__main__':
    def performOperations(operations):
        m = Multiset()
        result = []
        for op_str in operations:
            elems = op_str.split()
            if elems[0] == 'size':
                result.append(len(m))
            else:
                op, val = elems[0], int(elems[1])
                if op == 'query':
                    result.append(val in m)
                elif op == 'add':
                    m.add(val)
                elif op == 'remove':
                    m.remove(val)
        return result

    q = int(input())
    operations = []
    for _ in range(q):
        operations.append(input())

    result = performOperations(operations)
    
    fptr = open(os.environ['OUTPUT_PATH'], 'w')
    fptr.write('\n'.join(map(str, result)))
    fptr.write('\n')
    fptr.close()
Run Code Online (Sandbox Code Playgroud)