获取整数队列并复制该元素

Taking a queue of integers and making copies of that element

"Write a function named stutter that accepts a queue of integers as a parameter and replaces every element of the queue with two copies of that element in the original queue."

示例:

q1 = Queue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
stutter(q1)
while not queue.isempty():
    print(queue.dequeue(), end=' ')

应该给出答案“1 1 2 2 3 3”

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

        def is_empty(self):
            return self.items == []

        def enqueue(self, item):
            self.items.insert(0,item)

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

        def size(self):
            return len(self.items)

        def check_empty(self):
            if self.items == []:
                return True

def stutter(Q):
    queue=Queue()
    stack = Stack()
    while not queue.isempty():
        stack.push(queue.dequeue())

    while not stack.isempty():
        queue.enqueue(stack.pop())

这是我写的代码,我只能让它打印一次,我不能让它复制和排序。

尝试使用这个(目前无法测试):

def stutter(queue):
    # iterate all items
    for _ in range(queue.size()):
        # store item in local context
        item = queue.dequeue()
        # push two *references* to item into the queue
        queue.enqueue(item)
        queue.enqueue(item)

这将迭代所有项目一次,立即将两个副本推到队列的后面。一旦迭代结束,第一个推送的项目应该是第一个。

注意对象不会被复制,队列中会有两个对同一个对象的引用。

提示: Python 中已经有一个队列实现。您可以通过导入 queue

来使用它
In [17]:

def stutter(q):
    for i in range(q.size()):
        elm = q.dequeue()
        q.enqueue(elm)
        q.enqueue(elm)



In [18]:

q1 = Queue()
q1.enqueue(1)
q1.enqueue(2)
q1.enqueue(3)
stutter(q1)
print q1
[3, 3, 2, 2, 1, 1]

注意,我向队列 class 添加了一个 str 方法以查看结果。

class Queue:
        # SAME AS BEFORE
        def __str__(self):
            return str(self.items)

你也可以作弊,因为python没有私有实例变量。我不会推荐它作为一个选项。

def stutter(q):
    q.items = sorted([elm for elm in q.items] + [elm for elm in q.items])

如果您想 return 使用所需的输出:

q1 = Queue()
q1.enqueue(1)
q1.enqueue(2)
q1.enqueue(3)
stutter(q1)
print(' '.join([str(elm) for elm in q1.items]))
1 1 2 2 3 3