Python之路,第九篇:Python入门与基础9

python3  集合set

             集合set概念

集合是可变的容器;满足数学意义上的定义,求并集交集等

集合内的数据对象都是唯一的(不能重复多次)

集合是无序的存储结构,集合中的数据没有先后关系

集合是相当于只有键,没有值的字典,则键是集合的数据、

集合内的元素必须是不可变对象

集合是可迭代的(可以用for等遍历)

           生成空集合: 

                  set()

           生成非空集合:

                   set(iterable) 函数

 1 >>> set([3,5,7,9])
 2 {9, 3, 5, 7}
 3 >>> set("xiaoming")
 4 {'o', 'a', 'x', 'i', 'n', 'm', 'g'}
 5 >>> set("ABCCBA")
 6 {'B', 'C', 'A'}
 7 >>> s = set({"name":"xiaoming","age":12})
 8 >>> s
 9 {'age', 'name'}
10 >>> type(s)
11 <class 'set'>
12 >>> s1 = ( ("ABC", 123, True) )
13 >>> s1
14 ('ABC', 123, True)
15 >>> s2 = {True, None, "ABC", (1,2,3), 3.14}
16 >>> s2
17 {True, 'ABC', 3.14, None, (1, 2, 3)}
18 >>> type(s2)
19 <class 'set'>
20 >>> 
View Code

 

           集合的运算:

                  交集, 并集,  补集,  子集,   超集

A   =  { 1,2,3 }      B = { 2,3,4 }

交集 = { 2 ,3 }

并集 = { 1,2,3,4 }

补集 A - B = {1}

         B - A = {4}

         集合的运算:

             -  生成两个集合的补集

 A   =  { 1,2,3 }      B = { 2,3,4 }

 A - B = {1}   

B - A = {4}

            |    生成两个集合的并集

A   =  { 1,2,3 }      B = { 2,3,4 }

A | B    #{1,2,3,4}

            &   生成两个集合的交集

A   =  { 1,2,3 }      B = { 2,3,4 }

A & B   #{2,3}

{1,2} & {5,6}   #set()   空集

           ^    生成两个集合的补集

A   =  { 1,2,3 }      B = { 2,3,4 }

A ^ B   # {1, 4}

A ^ B   -->   (A -B ) | (B -A)

           >   判断一个集合是另一个集合的超集

           <  判断一个集合是另一个集合的真子集

A = {1,2,3}   C= {2,3}

A > C    #True

C  < A    #True

          ==   /   !=   判断集合相同、不同

A = {1,2,3}   C= {2,3}   D= {2,1,3}

A==D    # True

A==C     #False

        >=      <=  判断超集和相同、子集和相同

           例:略

          in   、not in   运算符

                   等同于字典的in  、not in

 

python3  集合中常用的方法:

S代表集合对象

S.add(e)                                 在集合添加一个新元素, 如果元素已经存在,则不添加,

S.clear()                                  清空集合内所有的元素

S.copy()                                 复制集合(浅拷贝)

S.difference(s2)                      等同于S-s2

S.difference_update(s2)         等同于S = S-s2

S.discard(digit)                       从集合S中移除一个数字,如果digit不是数字,则什么都不做。

S.intersection(s2)                   等同于S  & s2

S.intersection_update(s2)      等同于S = S & s2

S.issubset(s2)                        如果S为s2的子集返回True,否则返回False, 等同于S  <  s2

S.pop()                                   从集合S中删除一个随机元素

S.remove(e)                           从集合找那个删除一个元素,如果元素不存在则会产生一个keyerror错误

S.union(s2)                            生成S与s2的全集等同于    S  |    s2

S.update(s2)                     等同于  S = S | s2

 

               集合是可迭代对象; 

1 >>> s = {"abc",123, (1910,1,1)}
2 >>> for x in s:
3     print(x)
4 
5     
6 123
7 abc
8 (1910, 1, 1)
9 >>> 
View Code

 

              字典也是可迭代对象;

1 >>> d = {'name':'xiaoming',(2011,1,1):'生日'}
2 >>> for x in d:
3     print(x)
4 
5     
6 (2011, 1, 1)
7 name
8 >>> 
View Code

 

              用于集合的函数

len(x)      返回长度

max(x)     返回最大值

min(x)      返回最小值

sum(x)      返回和

any(x)       真值测试,任意为真,则返回True,否则为False

all(x)          真值测试,所有为真,则返回True,否则为False   

 

            集合推导式:

                   语法:   {表达式  if  变量  in  可迭代对象  (if  条件表达式)}

                  集合推导式可以嵌套;

 1 >>> names = ['a','b','c','d','e']
 2 >>> a_set = { n for n in names}
 3 >>> print(a_set)
 4 {'a', 'd', 'b', 'c', 'e'}
 5 >>> names = ['a','b','c','d','e','a','b','c','d','e']
 6 >>> a_set = {n for n in names}
 7 >>> print(a_set)
 8 {'a', 'd', 'b', 'c', 'e'}
 9 >>> {x for x in range(10)}
10 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
11 >>> {x:x for x in range(1,10)}
12 {1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
13 >>> 
View Code

 

总结:

             python3中 三种可变的数据类型: list  、 dict、 set

 

            固定集合 frozenset 

                     概念:创建一个不可变的,无序的,含有唯一元素的集合; 

             创建一个空的固定集合

                      frozenset()

             创建一个非空的固定集合

                     frozenset(iterable)

1 >>> frozenset()
2 frozenset()
3 >>> frozenset([1,2,3,4,5])
4 frozenset({1, 2, 3, 4, 5})
5 >>>
View Code

 

           固定集合的运算(等同于set运算)

            &  交集    、  |  并集    、   - 补集    、   ^  对称补集   、

              in  、not in 运算

            <   <=     >   >=    ==   !=   

           固定集合的方法:(不存在添加更新)

                  相当于集合的全部方法去掉修改集合的方法;

            作用:固定集合可以作为字典的键,可以作为集合的值;          

 总结:

        数据类型分可变和不可变的;

              bool  int  float   complex   str  list    dict    tuple   set   frozenset    

         值:  None 、  True  、 False ....

        运算符:

              +    -   *    /      **     //      %   (7个) 

              <   <=     >   >=    ==   !=   

               is  、   is not

                in 、   not in 

               not     and   or

              +=    -=    *=     /=......

               ~  &    ^    |   <<    >>>

              + (正号)    -(负值)

              =  (赋值)绑定

      表达式:

           “1 + 2”

            input(“aaa”)

       语句:

            a=10

            if 语句  、 else 语句

            while 语句、  break 语句  、 for 语句

           continue语句  、 pass语句、 del 语句

 练习1

 1 #!/usr/bin/python
 2 
 3 for x in range(1, 21):
 4     print(x, end=' ')
 5     if x % 5 == 0:
 6         print()
 7 
 8 >>> ================================ RESTART ================================
 9 >>> 
10 1 2 3 4 5 
11 6 7 8 9 10 
12 11 12 13 14 15 
13 16 17 18 19 20 
14 >>>
View Code
 1 #!/usr/bin/python
 2 
 3 for x in range(1, 21):
 4     print(x, end=' ')
 5 print()
 6 
 7 >>> ================================ RESTART ================================
 8 >>> 
 9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
10 >>> 
View Code
 1 h = int(input("请打印树干高度:"))
 2 #打印树冠
 3 for x in range(h):
 4     print( ' ' * ( h - x - 1 ) + '*' * ( 2 * x + 1 ) )
 5 #打印树干
 6 for x in range(h):
 7     print( ' ' * ( h - 1 ) + '*' )
 8 
 9 请打印树干高度:4
10    *
11   ***
12  *****
13 *******
14    *
15    *
16    *
17    *
View Code
 1 begin = int(input("请输入开始值:"))
 2 end = int(input("请输入结束值:"))
 3 print("十进制编码  十六进制编码  文字")
 4 for x in range(begin, (end+1)):
 5     print(str(x).center(11), hex(x).center(14), chr(x))
 6 请输入开始值:10000
 7 请输入结束值:10020
 8 十进制编码  十六进制编码  文字
 9    10000        0x271010    10001        0x271111    10002        0x271212    10003        0x271313    10004        0x271414    10005        0x271515    10006        0x271616    10007        0x271717    10008        0x271818    10009        0x271919    10010        0x271a20    10011        0x271b21    10012        0x271c22    10013        0x271d23    10014        0x271e24    10015        0x271f25    10016        0x272026    10017        0x272127    10018        0x272228    10019        0x272329    10020        0x2724     ✤
View Code
 1 for row  in range(1,10):
 2     #打印行,换行
 3     for col in range(1,row+1):
 4         print("%d*%d=%d" % (row,col,row*col),end=' ' )
 5     print()
 6 1*1=1 
 7 2*1=2 2*2=4 
 8 3*1=3 3*2=6 3*3=9 
 9 4*1=4 4*2=8 4*3=12 4*4=16 
10 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
11 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
12 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
13 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
14 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
View Code

 

 1 #方法1
 2 a = 1
 3 b = 1
 4 print(a, end=' ')
 5 print(b, end=' ')
 6 for x in range(18):
 7     n = a + b
 8     print(n, end=' ')
 9     a = b
10     b = n
11 print()
12 #方法2
13 a = 1
14 b = 1
15 print(a, end=' ')
16 print(b, end=' ')
17 for x in range(18):
18     print(a+b, end= ' ')
19     a,b = b , a + b
20 print()
21 #方法3
22 a = 1
23 b = 1
24 for x in range(20):
25     print(a, end=' ')
26     a , b = b, a + b
27 print()
28 #方法4
29 a = 1
30 b = 1
31 L = []
32 for x in range(20):
33     L.append(a)
34     a, b = b, a + b
35 for x in L:
36     print(x, end=' ')
37 print(L)
View Code

 

 1 #方法1
 2 a = 1
 3 b = 1
 4 print(a, end=' ')
 5 print(b, end=' ')
 6 for x in range(18):
 7     n = a + b
 8     print(n, end=' ')
 9     a = b
10     b = n
11 print()
12 #方法2
13 a = 1
14 b = 1
15 print(a, end=' ')
16 print(b, end=' ')
17 for x in range(18):
18     print(a+b, end= ' ')
19     a,b = b , a + b
20 print()
21 #方法3
22 a = 1
23 b = 1
24 for x in range(20):
25     print(a, end=' ')
26     a , b = b, a + b
27 print()
28 #方法4
29 a = 1
30 b = 1
31 L = []
32 for x in range(20):
33     L.append(a)
34     a, b = b, a + b
35 for x in L:
36     print(x, end=' ')
37 print()
38 print(L)
39 #方法5
40 L = [1,1]
41 while len(L) < 20:
42     L.append(L[-1] + L[-2])
43 print(L)
44 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 
45 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 
46 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 
47 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 
48 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
49 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
View Code

 

 1 #1 + 2 + 3 =6
 2 #1 + 2 + 14 + 4 + 7 =28
 3 
 4 n = 1
 5 while True:
 6     #判断是否为完全数,是则打印
 7     YinShu = []   #存放因数
 8     for x in range(1,n):
 9         if n % x == 0:
10             YinShu.append(x)
11     #判断因数之和是否等于n
12     if sum(YinShu) == n:
13         print(n, "是完全数.")
14     n += 1
15 
16 
17 6 是完全数.
18 28 是完全数.
19 496 是完全数.
20 8128 是完全数.
View Code

 

 1 L = []
 2 for i in range(1,6):
 3     n = input("请输入姓名:")
 4     a = input("请输入年龄:")
 5 #    print({"name": n , "age": a})
 6     d1 = {"name": n , "age": a}
 7     L.append(d1)
 8     i += 1
 9 print(L)
10 
11 print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
12 print('|' + '姓名'.center(8) + '|'+ '年龄'.center(8) + '|')
13 print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
14 print('|' + str(L[0]['name']).center(10) + '|'+ str(L[0]['age']).center(10) + '|')
15 print('|' + str(L[1]['name']).center(10) + '|'+ str(L[1]['age']).center(10) + '|')
16 print('|' + str(L[2]['name']).center(10) + '|'+ str(L[2]['age']).center(10) + '|')
17 print('|' + str(L[3]['name']).center(10) + '|'+ str(L[3]['age']).center(10) + '|')
18 print('|' + str(L[4]['name']).center(10) + '|'+ str(L[4]['age']).center(10) + '|')
19 print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
20 
21 请输入姓名:xiaoming
22 请输入年龄:18
23 请输入姓名:xiaoli
24 请输入年龄:19
25 请输入姓名:xiaogang
26 请输入年龄:20
27 请输入姓名:xiaohong
28 请输入年龄:21
29 请输入姓名:xiaomi
30 请输入年龄:22
31 [{'age': '18', 'name': 'xiaoming'}, {'age': '19', 'name': 'xiaoli'}, {'age': '20', 'name': 'xiaogang'}, {'age': '21', 'name': 'xiaohong'}, {'age': '22', 'name': 'xiaomi'}]
32 +----------+----------+
33 |   姓名   |   年龄   |
34 +----------+----------+
35 | xiaoming |    18    |
36 |  xiaoli  |    19    |
37 | xiaogang |    20    |
38 | xiaohong |    21    |
39 |  xiaomi  |    22    |
40 +----------+----------+
View Code
 1 L = []
 2 for i in range(1,6):
 3     n = input("请输入第"+ str(i) +"学生的姓名:")
 4     a = int(input("请输入第"+ str(i) +"学生的年龄:"))
 5     d1 = {"name": n , "age": a}
 6     L.append(d1)
 7 print(L)
 8 
 9 
10 L1 = L.copy()
11 print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
12 print('|' + '姓名'.center(8) + '|'+ '年龄'.center(8) + '|', sep='')
13 print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
14 for d in L1:
15     print('|' + d['name'].center(10) + '|' + str(d['age']).center(10) + '|',sep='')
16 print('+' + '-' * 10 + '+' + '-' * 10 + '+')
17 
18 #判断学生的年龄
19 s = int(input("输入学生的年龄:"))
20 L1.clear()
21 for d in L:
22     if d['age'] < s:
23         #print(d)
24         L1.append(d)
25 print("年龄低于" + str(s) + "岁的学生信息如下:")
26 print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
27 print('|' + '姓名'.center(8) + '|'+ '年龄'.center(8) + '|', sep='')
28 print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
29 for d in L1:
30     print('|' + d['name'].center(10) + '|' + str(d['age']).center(10) + '|',sep='')
31 print('+' + '-' * 10 + '+' + '-' * 10 + '+')
32 
33 请输入第1学生的姓名:xiaoming
34 请输入第1学生的年龄:13
35 请输入第2学生的姓名:xiaoli
36 请输入第2学生的年龄:15
37 请输入第3学生的姓名:xiaogang
38 请输入第3学生的年龄:16
39 请输入第4学生的姓名:xiaomi
40 请输入第4学生的年龄:18
41 请输入第5学生的姓名:xiaohong
42 请输入第5学生的年龄:19
43 [{'name': 'xiaoming', 'age': 13}, {'name': 'xiaoli', 'age': 15}, {'name': 'xiaogang', 'age': 16}, {'name': 'xiaomi', 'age': 18}, {'name': 'xiaohong', 'age': 19}]
44 +----------+----------+
45 |   姓名   |   年龄   |
46 +----------+----------+
47 | xiaoming |    13    |
48 |  xiaoli  |    15    |
49 | xiaogang |    16    |
50 |  xiaomi  |    18    |
51 | xiaohong |    19    |
52 +----------+----------+
53 输入学生的年龄:18
54 年龄低于18岁的学生信息如下:
55 +----------+----------+
56 |   姓名   |   年龄   |
57 +----------+----------+
58 | xiaoming |    13    |
59 |  xiaoli  |    15    |
60 | xiaogang |    16    |
61 +----------+----------+
View Code

 输入重定向:

        $ 命令   <  输入文件

         作用:将文件中的内容重定向为一个命令的输出(此时标准键盘输入无效)

 

转载于:https://www.cnblogs.com/weizitianming/p/8987981.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值