理解集合嵌套

本文从集合论的角度理解集合嵌套,并例举其在Python里的用法。

集合与集合间的关系:

  • 子集:若集合A中的每个元素都是B的元素,则A是B的子集。
  • 真子集:A是B的子集且B中至少有一个元素不属于A,则A是B的真子集。
  • 元素与集合的区分:元素不带花括号,集合带花括号。
  • 元素与集合是从属关系,如x ∈ A;而集合与集合间是包含关系,如A⊆B。但集合与集合之间只能有包含关系的前提是:集合位于同一层次。
  • 集合嵌套:当集合A里的元素由集合B、C构成,则B ∈ A是正确的(将集合里的集合看成元素,则其可与父集合有从属关系)。

Python——多层嵌套list的递归处理方法

Q:用Python处理一个多层嵌套list

1
['and', 'B', ['not', 'A'],[1,2,1,[2,1],[1,1,[2,2,1]]], ['not', 'A', 'A'],['or', 'A', 'B' ,'A'] , 'B']

处理需求:

  • 展开成一层
  • 删除重复元素,包括重复的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
def onelist(ll):

"""
功能:用递归方法删除多层列表中重复元素
"""

result = []
for i in ll:
if isinstance (i, list):
if onelist(i) not in result:
result.append(onelist(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 onelist(testcase)
print list(flatten(testcase))

output:

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']
拿钱去买猫粮和狗粮嗷 ~