python - 以相反顺序打印队列中的小组数据

标签 python algorithm data-structures stack queue

我有一个包含以下元素的队列:

1 None 2 3 None 4 5 6 7 None 8 9 10 11 12 13 14 15

这里 None 只做分隔符的工作,仅此而已。

现在我想像这样打印输出:

8 9 10 11 12 13 14 15
4 5 6 7
2 3
1

我能够打印这个输出:

15 14 13 12 11 10 9 8 
7 6 5 4 
3 2 
1

从右侧遍历队列。

这是代码:

length = len(sequenced_que)
    for i in range(0, length):
        temp = sequenced_que.pop()
        if temp is None:
            print()
        else:
            print(temp.data, end=" ")


8 9 10 11 12 13 14 15
4 5 6 7
2 3
1

上述期望的输出可以通过使用临时堆栈来实现。我可以将元素压入堆栈,直到遇到 None,然后开始将它们弹出。

但这需要 O(n) 的额外空间。

我只需要一个高效的算法而不是使用临时堆栈。您可以使用队列和列表的所有属性。

谢谢你:)

最佳答案

您可以使用 itertools.groupby在所需元素处“拆分”数组。

import itertools

data = [1, None, 2, 3, None, 4, 5, 6, 7, None, 8, 9, 10, 11, 12, 13, 14, 15]
# Break the array into subarrays at None
blocks = [list(v) for k, v in itertools.groupby(data, lambda e: e is None) if not k]
# Reverse the subarrays
blocks.reverse()  # or as a new list: rev_blocks = blocks[::-1]

在上面之后,blocks 等于[[8, 9, 10, 11, 12, 13, 14, 15], [4, 5, 6, 7], [2, 3], [1]]。如果你想以相同的格式打印这些子数组:

for arr in blocks:
    print(*arr, sep=' ')

关于python - 以相反顺序打印队列中的小组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45962858/

相关文章:

python - logging.error() 调用了多少次?

javascript - 是否有任何库可以有效地编辑 Javascript 中的大字符串?

javascript - 如果数组的数组中不存在数组,则推送数组

c++ - 使用队列和堆栈将中缀转换为后缀的运行时间是多少?

javascript - 相当于字典的数据结构?

python - 如何将变量与文本字符串混合?

python - 如何让 pip uninstall 删除安装后创建的文件?

python - SQL 与帕累托边界

javascript - native JavaScript 排序的执行速度比实现的合并排序和快速排序慢

c - 如何读取存储在 char 数组中的值?