【问题标题】:How to find/delete duplicate items in stack如何查找/删除堆栈中的重复项
【发布时间】:2021-08-07 07:58:16
【问题描述】:

堆栈中的项目应该是唯一的。有没有办法可以删除堆栈中的重复项?并通知用户他的输入已经在堆栈中?

这是我的代码:

class Node:
def __init__(self, key):
    self.left = None
    self.right = None
    self.val = key

def printPreorder(root):
if root:
    print(root.val),
    printPreorder(root.left)
    printPreorder(root.right)

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

    def push(self, item):
        return self.items.append(item)

    def pop(self):
        return self.items.pop()

print ("Create 3 words using the letters:")
root = Node('n')
root.right = Node('o')
root.left = Node ('w')
printPreorder(root)
print("-----------------------------------")


s1 = stack()
while (s1.size() <3):
    FirstList = (input("Enter the word you created: ")).lower()
    if FirstList == 'won' or FirstList == 'own' or FirstList == 'now':
        s1.push(FirstList)
        print(s1.items)
    
    else: 
        print('Try another word!')

【问题讨论】:

  • 一种方法是将堆栈内容的副本存储在一个列表中并在那里搜索,但如果您的堆栈有很多元素,那就不好了

标签: python stack user-defined-functions


【解决方案1】:

理想情况下,您不能遍历堆栈以查找重复元素。 但是由于您在堆栈实现中使用列表,因此您可以遍历它并找到重复的元素,但这不是一个好主意。

相反,您可以使用其他数据结构,例如,set 可用于跟踪您迄今为止看到的所有独特元素。每次调用.push() 时,您都可以检查该元素是否已存在于集合中。如果它不存在,那么您可以将它添加到堆栈和集合中。如果存在,您可以通知用户它已经存在于堆栈中。

当你从堆栈中弹出时,记得从集合中移除元素。

【讨论】:

    【解决方案2】:

    您可以使用set 来存储唯一值。检查堆栈是否具有唯一元素的一种简单方法是比较堆栈元素集合和堆栈元素列表的大小(因为您的堆栈实现是一个列表)。

    def isDuplicate(self):
       return len(set(self.items())) != len(self.items())
    

    要检查堆栈中是否存在重复元素(以列表的形式实现),您可以编写一个将元素插入集合的实现,并在每一步检查该元素是否已存在于列表中。

    def removeDuplicate(self):
       temp_set = set()
       for item in self.items():
          if item in temp_set:
             return item
       return None
    

    然后您可以使用 self.items().pop(self.removeDuplicate()) 从堆栈中删除该重复元素

    【讨论】:

      猜你喜欢
      • 2015-05-24
      • 1970-01-01
      • 2010-10-19
      • 2015-06-18
      • 1970-01-01
      • 2021-11-20
      • 2013-08-03
      • 2018-05-24
      • 2014-11-02
      相关资源
      最近更新 更多