LeetCodeT1313压缩编码列表
给你一个以行程长度编码压缩的整数列表 nums 。
考虑每对相邻的两个元素 [a, b] = [nums[2*i], nums[2*i+1]] (其中 i >= 0 ),每一对都表示解压后有 a 个值为 b 的元素。
请你返回解压后的列表。
示例:
输入:nums = [1,2,3,4]
输出:[2,4,4,4]
解释:第一对 [1,2] 代表着 2 的出现频次为 1,所以生成数组 [2]。
第二对 [3,4] 代表着 4 的出现频次为 3,所以生成数组 [4,4,4]。
最后将它们串联到一起 [2] + [4,4,4,4] = [2,4,4,4]。
提示:
2 <= nums.length <= 100
nums.length % 2 == 0
1 <= nums[i] <= 100
我的代码:
class Solution(object): def decompressRLElist(self, nums): res = [] for i in range(0, len(nums), 2): res.extend([nums[i + 1]] * nums[i]) return [([nums[i + 1]] * nums[i]) for i in range(0, len(nums), 2)]
问题本身比较简单: 从第0个元素开始,每连续的2个元素代表一组数据,如(a,b)这组数据及元素b出现a次,生成这组数据的数组
即 : arr = [b,b,b,b....] len(arr) = a
然后将他们拼接
但在看评论的时候注意到一行代码给出解,特此记录
def decompressRLElist(nums): return sum(([b] * a for a, b in zip(nums[::2], nums[1::2])), [])
初学python,第一次见到这么漂亮的代码,花了1个小时才彻底弄懂,3个问题
1.python列表中的[::]特别应用 https://www.cnblogs.com/mxh1099/p/5804064.html
nums[a:b:c] 代表着将列表中的元素从[a,b)跳步为c,取出对应元素组成列表
如: nums = [1,2,3,4] nums[::2]即[1,3]
拓展:nums[::-1]即将列表倒置
2.zip(函数) https://www.runoob.com/python/python-func-zip.html
本题应用: zip(nums[::2], nums[1::2])
即zip([1,3,...],[2,4,...]) 将两个列表中对应的元素分别打包成元祖即 (1,2),(2,4)...
然后for循环a,b分别代表元祖第一和第一个元素
[b]*a即生成列表 arr: [b,b,b,b...] len(arr) = a
3. sum()函数的特别应用: 将二维列表合并为一维列表
sum()函数本质是将传入的可迭代对象中每个元素相加
如sum([1,2,3]) = 6
sum([1,2,3],4) = 6 + 4 = 10
那么特殊用法: sum([[列表1],[列表2],[列表3]]],[]) 可以理解为[列表1]+[列表2]+[列表3]+[] = [ 列表1,2,3中的所有元素 ] 注: 列表合并可直接用"+",也可用extend()函数
即sum(二维列表,[]) 的返回值为 [二维列表所有元素]
如 arr = [[1,2,3],[4,5,6],[7,8,9]] sum(arr,[]) 的返回值为 [1,2,3,4,5,6,7,8,9]