首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >is_subset的Python实现

is_subset的Python实现
EN

Code Review用户
提问于 2017-12-22 01:22:55
回答 1查看 321关注 0票数 6

我想要求对我的Set实现进行代码审查:

代码语言:javascript
复制
#!python
from linkedlist import Node, LinkedList
from hashtable import HashTable




class Set(object):
    def __init__(self, elements=None):
        # intilaize the size of the set, starts with intial size of 10 
        if elements is None:
            initial_size = 10
        else:
            initial_size = len(elements)
        #     
        self.data = HashTable(initial_size)
        for item in elements:
            if self.data.contains(item):
                continue
            else:
                self.data.set(item, None)

    def __str__(self):
        return str(self.data.keys())

    def set_contents(self):
        """Get the contents of the set [key inside a HashTable]"""
        return self.data.keys()

    def size(self):
        """Find size of the set"""
        return self.data.size

    def contains(self, element):
        """return a boolean contained inside of the set [key inside a HashTable]"""
        """Best case running time for contains is O(1) near beginning of set
        Worst case running time for contains O(n) near end of set """
        return self.data.contains(element)

    def add(self, element):
        """Add the element of the set"""
        # O (1)
        """Best case running time: O(1) near beginning of list of keys
        Worst case running time: O(n) near end of list of keys """
        if self.contains(element):
            return
        else:
            self.data.set(element, None)

    def remove(self, element):
        # Raise value error if not available
        if self.contains(element):
            self.data.delete(element)
        else:
            raise ValueError("Element not in set")

    def union(self, second_set):
        """Return a new  set, that is a union of first_set and second_set"""
        # O(n) since it goes through every item and has contains"""
        # create a new set that has the set conents
        result_set = self.set_contents()

        for item in second_set.set_contents():
            if self.contains(item):
                continue
            else:
                result_set.append(item)
        return Set(result_set)

    def intersection(self, second_set):
        """Return a new set, that is intersection of this set and second_set."""
        """O(n) since it goes through every item and has contains"""
        # create an empty set
        result_set = []
        for item in second_set.set_contents():
            # check if the set contains the item 
            if self.contains(item):
                result_set.append(item)
            # else:
            #     return ValueError("Set is empty")
        return Set(result_set)

Is_Subset

代码语言:javascript
复制
    def is_subset(self, second_set):
        """Return True if second set is a subset of this set,else False"""
        # O(n); goes through every item and has contains
        # Compariing the size of the 2 set  
        # to make sure if set is in the second set
        # for bucket in self.buckets:
            # for element in bucket.iterate():
            #     if not other.contains(element)
        if self.size() <= second_set.size():
            for item in self.set_contents():
                if second_set.contains(item):
                    continue
                else:
                    return False
            return True
        else:
            return False

# set_set_test = Set()
set_test = Set([1, 2, 3, 4, 5,6,7,8,9,10])
set_test2 = Set([ 11,12])
test_intersection = set_test.intersection(set_test2)
print(test_intersection)
set_test2 = Set([6, 7, 8,9,10])

print(set_test)
print(set_test2)

set_test.add(1)
print(set_test)
print(set_test.intersection(set_test2))
print(set_test.union(set_test2))

print(set_test.is_subset(set_test2))

set_test = Set([1, 2, 3])
set_test2 = Set([1, 2, 3, 4, 5, 6, 7, 8])
print(set_test.is_subset(set_test2))

set_test = Set([1, 2, 3])
set_test2 = Set([1, 2, 3])
print(set_test.is_subset(set_test2))

set_test = Set([1, 2, 3, 4])
set_test2 = Set([1, 2, 3])
print(set_test.is_subset(set_test2))

set_test = Set([1, 2, 3, 4, 5])
set_test2 = Set([4, 5, 6, 7, 8])
print(set_test.is_subset(set_test2))
EN

回答 1

Code Review用户

发布于 2017-12-22 16:19:07

警告:这是未经测试的

代码语言:javascript
复制
        for item in self.set_contents():
            if second_set.contains(item):
                continue
            else:
                return False
        return True

不需要continue就可以重写

代码语言:javascript
复制
        for item in self.set_contents():
            if not second_set.contains(item):
                return False
        return True

然后,这是可以使用allany的通常情况。

例如,你会得到这样的东西:

代码语言:javascript
复制
        return all(second_set.contains(item) for item in self.set_contents())

然后,整个功能变成:

代码语言:javascript
复制
def is_subset(self, second_set):
    """Return True if second set is a subset of this set,else False"""
    # O(n); goes through every item and has contains
    # Compariing the size of the 2 set  
    # to make sure if set is in the second set
    # for bucket in self.buckets:
        # for element in bucket.iterate():
        #     if not other.contains(element)
    return self.size() <= second_set.size() and \
              all(second_set.contains(item) for item in self.set_contents())
票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/183390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档