反向打印队列中的小数据组

2024-04-23 05:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

在这里,没有人做分离器的工作,除此之外,什么也没有。你知道吗

现在我想这样打印输出:

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

通过使用临时堆栈可以实现上述所需的输出。我可以将元素推入堆栈,直到遇到“无”,然后开始弹出它们。你知道吗

但这需要额外的空间。你知道吗

我只需要一个有效的算法,而不是使用临时的斯塔克,你呢可以使用队列和列表的所有属性。你知道吗

谢谢:)


Tags: 代码innone元素forlen队列堆栈
1条回答
网友
1楼 · 发布于 2024-04-23 05:32:59

可以使用^{}在所需元素处“拆分”数组。你知道吗

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=' ')
网友
2楼 · 发布于 2024-04-23 05:32:59

使用itertools的解决方案:

>>> import itertools
>>> l=[1, None, 2 ,3, None, 4 ,5, 6, 7, None, 8, 9, 10, 11, 12 ,13 ,14 ,15]
>>> l2=[list(g) for k,g in itertools.groupby(l,lambda x:x is None) if not k]
>>> l2
[[1], [2, 3], [4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15]]
>>> for i in range(len(l2)):
...     print l2[-(i+1)]
... 
[8, 9, 10, 11, 12, 13, 14, 15]
[4, 5, 6, 7]
[2, 3]
[1]

相关问题 更多 >