我想出了这段代码,将已排序的整数列表转换为连续正整数列表。
def consecutive_positive_inc(l):
"""
[0, 1, 1, 3, 4, 4, 5] -> [0, 1, 1, 2, 3, 3, 4]
"""
from collections import defaultdict
d = defaultdict(int)
for i in l:
d[i] += 1
for i, count in enumerate(d.values()):
for _ in range(count):
yield i
if __name__ == '__main__':
l = [-3, -2, -1, 0, 1, 1, 3, 4, 4, 5]
result = list(consecutive_positive_inc(l))
assert result == [0, 1, 2, 3, 4, 4, 5, 6, 6, 7]
Run Code Online (Sandbox Code Playgroud)
这是最好的方法还是可以使用更简单的方法?
我认为你让事情变得比需要的更复杂了。只需保留一个计数器并在数字变化时进行碰撞即可。
def consecutive_positive_inc(l):
"""
[0, 1, 1, 3, 4, 4, 5] -> [0, 1, 1, 2, 3, 3, 4]
"""
last = l[0]
idx = 0
for i in l:
if i != last:
idx += 1
last = i
yield idx
if __name__ == '__main__':
l = [-3, -2, -1, 0, 1, 1, 3, 4, 4, 5]
result = list(consecutive_positive_inc(l))
assert result == [0, 1, 2, 3, 4, 4, 5, 6, 6, 7]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |