1
|
[ 'and' , 'B' , [ 'not' , 'A' ],[ 1 , 2 , 1 ,[ 2 , 1 ],[ 1 , 1 ,[ 2 , 2 , 1 ]]], [ 'not' , 'A' , 'A' ],[ 'or' , 'A' , 'B' , 'A' ] , 'B' ] |
需求1)如何展开成一层?
需求2)如何删除重复的元素? 包括重复的list, 要考虑子list的重复元素删除后造成的子list重复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#!/usr/bin/env python # -*- coding: utf-8 -*- def unilist(ll): """ 功能:用递归方法删除多层列表中重复元素 """ result = [] for i in ll: if isinstance (i, list ): if unilist(i) not in result: result.append(unilist(i)) else : if i not in result: result.append(i) return result def flatten(ll): """ 功能:用递归方法展开多层列表,以生成器方式输出 """ if isinstance (ll, list ): for i in ll: for element in flatten(i): yield element else : yield ll testcase = [ 'and' , 'B' , [ 'not' , 'A' ],[ 1 , 2 , 1 ,[ 2 , 1 ],[ 1 , 1 ,[ 2 , 2 , 1 ]]], [ 'not' , 'A' , 'A' ],[ 'or' , 'A' , 'B' , 'A' ] , 'B' ] print unilist(testcase) print list (flatten(testcase)) |
运行结果
1
2
3
|
[ 'and' , 'B' , [ 'not' , 'A' ], [ 1 , 2 , [ 2 , 1 ], [ 1 , [ 2 , 1 ]]], [ 'or' , 'A' , 'B' ]] [ 'and' , 'B' , 'not' , 'A' , 1 , 2 , 1 , 2 , 1 , 1 , 1 , 2 , 2 , 1 , 'not' , 'A' , 'A' , 'or' , 'A' , 'B' , 'A' , 'B' ] |
以上这篇Python多层嵌套list的递归处理方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。