获取整数队列并复制该元素
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
"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