2024-06-10 13:02:40 发布
网友
我需要解压缩一个数组,我不知道从哪里开始。在
这是函数的输入
def main(): # Test case for Decompress function B = [6, 2, 7, 1, 3, 5, 1, 9, 2, 0] A = Decompress(B) print(A)
我要这个出来
如果看不到模式,B[1]是B[2]在A[]中出现的次数,B[3]是{}在A[]中出现的次数,依此类推。在
B[1]
B[2]
A[]
B[3]
我怎么写这个函数?在
再来一个班轮:
def decompress(vl): return sum([vl[i] * [vl[i+1]] for i in xrange(0, len(vl), 2)], [])
列表理解提取并解包对(xrange(0, len(vl), 2)遍历对的开始索引,vl[i]是多次重复,vl[i+1]是要重复的内容)。
xrange(0, len(vl), 2)
vl[i]
vl[i+1]
sum()将结果连接在一起([]是未打包列表按顺序添加到的初始值)。
sum()
[]
def unencodeRLE(i): i = list(i) #Copies the list to a new list, so the original one is not changed. r = [] while i: count = i.pop(0) n = i.pop(0) r+= [n for _ in xrange(count)] return r
带有zip()和itertools.chain.from_iterable的精简版:
zip()
itertools.chain.from_iterable
from itertools import chain list(chain.from_iterable([v] * c for c, v in zip(*([iter(B)]*2))))
演示:
分解:
zip(*([iter(B)]*2)))对的计数为:
zip(*([iter(B)]*2)))
>>> zip(*([iter(B)]*2)) [(6, 2), (7, 1), (3, 5), (1, 9), (2, 0)]
从输入iterable中获取对是一个相当标准的Python技巧。
([v] * c for c, v in zip(*([iter(B)]*2)))是一个生成器表达式,它获取计数和值,并生成值为repeated count times的列表:
([v] * c for c, v in zip(*([iter(B)]*2)))
>>> next([v] * c for c, v in zip(*([iter(B)]*2))) [2, 2, 2, 2, 2, 2]
chain.from_iterable获取生成器表达式生成的各种列表,并允许您对它们进行迭代,就像它们是一个长列表一样。
chain.from_iterable
list()将其全部还原为一个列表。
list()
再来一个班轮:
列表理解提取并解包对(
xrange(0, len(vl), 2)
遍历对的开始索引,vl[i]
是多次重复,vl[i+1]
是要重复的内容)。sum()
将结果连接在一起([]
是未打包列表按顺序添加到的初始值)。带有
zip()
和itertools.chain.from_iterable
的精简版:演示:
^{pr2}$分解:
zip(*([iter(B)]*2)))
对的计数为:从输入iterable中获取对是一个相当标准的Python技巧。
([v] * c for c, v in zip(*([iter(B)]*2)))
是一个生成器表达式,它获取计数和值,并生成值为repeated count times的列表:chain.from_iterable
获取生成器表达式生成的各种列表,并允许您对它们进行迭代,就像它们是一个长列表一样。list()
将其全部还原为一个列表。相关问题 更多 >
编程相关推荐