作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个包含以下元素的队列:
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/
我想为锦标赛的终点分配一组分数,其中第一名获得 10 分,第二名获得 9 分,依此类推。然后我想合并具有相同团队名称的玩家的积分,没有团队(空)的任何人都不会获得积分。然后返回积分最多的队伍名称(te
我是一名优秀的程序员,十分优秀!