将list列表与一个空列表相加,就能把嵌套列表合并成一个
- a=[[1],[2],[3],[4],[5]]
- merge=sum(a,[])
- print('sum result:',merge)
-
结果:
- sum result: [1, 2, 3, 4, 5]
-
itertools.chain()与itertools.chain.from_iterable()函数都可以拼接可迭代对象中的所有元素,将元素串联后创建一个新的迭代器。区别是前者可用于拼接多个嵌套列表,后者拼接单个嵌套列表,示例如下。
使用itertools.chain():
- import itertools
-
- a='abc'
- b='def'
-
- merge=itertools.chain(a,b)
- result = list(merge)
-
- print('itertools.chain result:',result)
-
结果:
- itertools.chain result: ['a', 'b', 'c', 'd', 'e', 'f']
-
使用itertools.chain.from_iterable():
- import itertools
-
- a=[[1],[2],[3],[4],[5]]
- merge=itertools.chain.from_iterable(a)
- result = list(merge)
-
- print('itertools.chain.from_iterable result:',result)
-
结果:
- itertools.chain.from_iterable result: [1, 2, 3, 4, 5]
-
遍历list内的每一个元素,如果该元素不是列表或元组就加到生成器里,如果是可迭代对象就继续递归调用,直到把所有子列表都打散,最终返回一个大列表。
- def flat(l):
- for k in l:
- if not isinstance(k, (list, tuple)):
- yield k
- else:
- yield from flat(k)
- a=[[1],[2],[3],[4],[5]]
- print ('flat result:',list(flat(a)))
-
结果:
- flat result: [1, 2, 3, 4, 5]
-
直接把整个list转换成字符串,然后替换掉边框,最后通过eval函数再转回list格式
- a=[[1],[2],[3],[4],[5],[['m'],['n']]]
- result = eval('[%s]'%repr(a).replace('[', '').replace(']', ''))
- print('eval result:',result)
-
结果:
- eval result: [1, 2, 3, 4, 5, 'm', 'n']
-