解法一
简单的进行遍历
class Solution:
def decompressRLElist(self, nums: List[int]) -> List[int]:
ans = []
for i in range(len(nums)//2):
ans += [nums[2*i+1]] * nums[2*i]
return ans
解法二 (大神解法)
class Solution:
def decompressRLElist(self, nums: List[int]) -> List[int]:
return ([j for i, j in zip(nums[::2], nums[1::2]) for _ in range(i)])
zip函数中,第一个为奇数位列表,第二个为偶数位列表
注意一行两个for循环时,按顺序执行,即,后一个在前一个里面
解法三(大神解法)
class Solution:
def decompressRLElist(self, nums: List[int]) -> List[int]:
return sum(([b]*a for a, b in zip(nums[::2], nums[1::2])), [])
跟第二种差不多,只不过使用了sum函数,这里的sum使用了列表相加
sum函数多种用法
连接型
列表相加
>>> sum(([1, 2], [3]), [])
[1, 2, 3]
元组相加类似
>>> sum(((1, 2), (5,9)), ())
(1, 2, 5, 9)
计算总和后再加
>>> sum((1, 5, 7), 10)
23
numpy中用法
axis=0
表示按列相加;axis=1
表示按行相加
>>> import numpy as np
>>> a = [[1, 2, 3], [4, 5, 6]]
>>> np.sum(a)
21
>>> np.sum(a, axis=0)
array([5, 7, 9])
>>> np.sum(a, axis=1)
array([ 6, 15])
>>> np.sum(a, 1)
array([ 6, 15])
>>> np.sum(a, 0)
array([5, 7, 9])