给定列表
s = [[[[[[1, 1]], [[9, 1]]], [[5, 1]]], [[[3, 1]], [[7, 1]]]], [[[[2, 1]], [[6, 1]]], [[[4, 1]], [[8, 1]]]]]
s[0] 是 [[[[[1, 1]], [[9, 1]]], [[5, 1]]], [[[3, 1]], [[7, 1]]]]
s[1] 是 [[[[2, 1]], [[6, 1]]], [[[4, 1]], [[8, 1]]]]
每一个外层列表都包含2个子列表不停往下嵌套,并且s[0] 比s[1] 多嵌套一层
解决方案
方法1
转字符串之后使用replace替换掉不需要的值,例如
b = str(s).replace('[', '').replace(']', '').replace(' ', '').split(',')
for m,n in enumerate(b):
if m%2 == 0:
result.append(int(n))
这里根据需求删掉了每一个最里层列表的第二维的值
方法2
优美一点的解法是用递归去取值
def flat(nums):
res = []
for i in nums:
if isinstance(i, list):
res.extend(flat(i))
else:
res.append(i)
return res
result = flat(s)
结果:[1, 1, 9, 1, 5, 1, 3, 1, 7, 1, 2, 1, 6, 1, 4, 1, 8, 1]
去掉多余的1之后和下面的结果一致
结果
result
Out[157]: [1, 9, 5, 3, 7, 2, 6, 4, 8]
tips
这个序列来源是一道算法题,要求是找到一个1到n正整数序列,使得任意一个中间的数乘以二不能等于两边各自任取一个数之和(即 aj * 2 != ai + ak, 其中 i<j<k ,i,j,k之间的差值不定),有兴趣的小伙伴可以做一下