python3  集合set

集合set概念

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

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

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

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

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

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

生成空集合:

set()

生成非空集合:

set(iterable) 函数

 >>> set([3,5,7,9])
{9, 3, 5, 7}
>>> set("xiaoming")
{'o', 'a', 'x', 'i', 'n', 'm', 'g'}
>>> set("ABCCBA")
{'B', 'C', 'A'}
>>> s = set({"name":"xiaoming","age":12})
>>> s
{'age', 'name'}
>>> type(s)
<class 'set'>
>>> s1 = ( ("ABC", 123, True) )
>>> s1
('ABC', 123, True)
>>> s2 = {True, None, "ABC", (1,2,3), 3.14}
>>> s2
{True, 'ABC', 3.14, None, (1, 2, 3)}
>>> type(s2)
<class 'set'>
>>>

集合的运算:

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

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

集合是可迭代对象;

 >>> s = {"abc",123, (1910,1,1)}
>>> for x in s:
print(x) 123
abc
(1910, 1, 1)
>>>

字典也是可迭代对象;

 >>> d = {'name':'xiaoming',(2011,1,1):'生日'}
>>> for x in d:
print(x) (2011, 1, 1)
name
>>>

用于集合的函数

len(x)      返回长度

max(x)     返回最大值

min(x)      返回最小值

sum(x)      返回和

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

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

集合推导式:

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

集合推导式可以嵌套;

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

总结:

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

固定集合 frozenset

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

创建一个空的固定集合

frozenset()

创建一个非空的固定集合

frozenset(iterable)

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

固定集合的运算(等同于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

 #!/usr/bin/python

 for x in range(1, 21):
print(x, end=' ')
if x % 5 == 0:
print() >>> ================================ RESTART ================================
>>>
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
>>>
 #!/usr/bin/python

 for x in range(1, 21):
print(x, end=' ')
print() >>> ================================ RESTART ================================
>>>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
>>>
 h = int(input("请打印树干高度:"))
#打印树冠
for x in range(h):
print( ' ' * ( h - x - 1 ) + '*' * ( 2 * x + 1 ) )
#打印树干
for x in range(h):
print( ' ' * ( h - 1 ) + '*' ) 请打印树干高度:4
*
***
*****
*******
*
*
*
*
 begin = int(input("请输入开始值:"))
end = int(input("请输入结束值:"))
print("十进制编码 十六进制编码 文字")
for x in range(begin, (end+1)):
print(str(x).center(11), hex(x).center(14), chr(x))
请输入开始值:10000
请输入结束值:10020
十进制编码 十六进制编码 文字
10000 0x2710 ✐
10001 0x2711 ✑
10002 0x2712 ✒
10003 0x2713 ✓
10004 0x2714 ✔
10005 0x2715 ✕
10006 0x2716 ✖
10007 0x2717 ✗
10008 0x2718 ✘
10009 0x2719 ✙
10010 0x271a ✚
10011 0x271b ✛
10012 0x271c ✜
10013 0x271d ✝
10014 0x271e ✞
10015 0x271f ✟
10016 0x2720 ✠
10017 0x2721 ✡
10018 0x2722 ✢
10019 0x2723 ✣
10020 0x2724 ✤
 for row  in range(1,10):
#打印行,换行
for col in range(1,row+1):
print("%d*%d=%d" % (row,col,row*col),end=' ' )
print()
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
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
 #方法1
a = 1
b = 1
print(a, end=' ')
print(b, end=' ')
for x in range(18):
n = a + b
print(n, end=' ')
a = b
b = n
print()
#方法2
a = 1
b = 1
print(a, end=' ')
print(b, end=' ')
for x in range(18):
print(a+b, end= ' ')
a,b = b , a + b
print()
#方法3
a = 1
b = 1
for x in range(20):
print(a, end=' ')
a , b = b, a + b
print()
#方法4
a = 1
b = 1
L = []
for x in range(20):
L.append(a)
a, b = b, a + b
for x in L:
print(x, end=' ')
print(L)
 #方法1
a = 1
b = 1
print(a, end=' ')
print(b, end=' ')
for x in range(18):
n = a + b
print(n, end=' ')
a = b
b = n
print()
#方法2
a = 1
b = 1
print(a, end=' ')
print(b, end=' ')
for x in range(18):
print(a+b, end= ' ')
a,b = b , a + b
print()
#方法3
a = 1
b = 1
for x in range(20):
print(a, end=' ')
a , b = b, a + b
print()
#方法4
a = 1
b = 1
L = []
for x in range(20):
L.append(a)
a, b = b, a + b
for x in L:
print(x, end=' ')
print()
print(L)
#方法5
L = [1,1]
while len(L) < 20:
L.append(L[-1] + L[-2])
print(L)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
 #1 + 2 + 3 =6
#1 + 2 + 14 + 4 + 7 =28 n = 1
while True:
#判断是否为完全数,是则打印
YinShu = [] #存放因数
for x in range(1,n):
if n % x == 0:
YinShu.append(x)
#判断因数之和是否等于n
if sum(YinShu) == n:
print(n, "是完全数.")
n += 1 6 是完全数.
28 是完全数.
496 是完全数.
8128 是完全数.
 L = []
for i in range(1,6):
n = input("请输入姓名:")
a = input("请输入年龄:")
# print({"name": n , "age": a})
d1 = {"name": n , "age": a}
L.append(d1)
i += 1
print(L) print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
print('|' + '姓名'.center(8) + '|'+ '年龄'.center(8) + '|')
print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
print('|' + str(L[0]['name']).center(10) + '|'+ str(L[0]['age']).center(10) + '|')
print('|' + str(L[1]['name']).center(10) + '|'+ str(L[1]['age']).center(10) + '|')
print('|' + str(L[2]['name']).center(10) + '|'+ str(L[2]['age']).center(10) + '|')
print('|' + str(L[3]['name']).center(10) + '|'+ str(L[3]['age']).center(10) + '|')
print('|' + str(L[4]['name']).center(10) + '|'+ str(L[4]['age']).center(10) + '|')
print('+' + '-' * 10 + '+' + '-' * 10 + '+' ) 请输入姓名:xiaoming
请输入年龄:18
请输入姓名:xiaoli
请输入年龄:19
请输入姓名:xiaogang
请输入年龄:20
请输入姓名:xiaohong
请输入年龄:21
请输入姓名:xiaomi
请输入年龄:22
[{'age': '', 'name': 'xiaoming'}, {'age': '', 'name': 'xiaoli'}, {'age': '', 'name': 'xiaogang'}, {'age': '', 'name': 'xiaohong'}, {'age': '', 'name': 'xiaomi'}]
+----------+----------+
| 姓名 | 年龄 |
+----------+----------+
| xiaoming | 18 |
| xiaoli | 19 |
| xiaogang | 20 |
| xiaohong | 21 |
| xiaomi | 22 |
+----------+----------+
 L = []
for i in range(1,6):
n = input("请输入第"+ str(i) +"学生的姓名:")
a = int(input("请输入第"+ str(i) +"学生的年龄:"))
d1 = {"name": n , "age": a}
L.append(d1)
print(L) L1 = L.copy()
print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
print('|' + '姓名'.center(8) + '|'+ '年龄'.center(8) + '|', sep='')
print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
for d in L1:
print('|' + d['name'].center(10) + '|' + str(d['age']).center(10) + '|',sep='')
print('+' + '-' * 10 + '+' + '-' * 10 + '+') #判断学生的年龄
s = int(input("输入学生的年龄:"))
L1.clear()
for d in L:
if d['age'] < s:
#print(d)
L1.append(d)
print("年龄低于" + str(s) + "岁的学生信息如下:")
print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
print('|' + '姓名'.center(8) + '|'+ '年龄'.center(8) + '|', sep='')
print('+' + '-' * 10 + '+' + '-' * 10 + '+' )
for d in L1:
print('|' + d['name'].center(10) + '|' + str(d['age']).center(10) + '|',sep='')
print('+' + '-' * 10 + '+' + '-' * 10 + '+') 请输入第1学生的姓名:xiaoming
请输入第1学生的年龄:13
请输入第2学生的姓名:xiaoli
请输入第2学生的年龄:15
请输入第3学生的姓名:xiaogang
请输入第3学生的年龄:16
请输入第4学生的姓名:xiaomi
请输入第4学生的年龄:18
请输入第5学生的姓名:xiaohong
请输入第5学生的年龄:19
[{'name': 'xiaoming', 'age': 13}, {'name': 'xiaoli', 'age': 15}, {'name': 'xiaogang', 'age': 16}, {'name': 'xiaomi', 'age': 18}, {'name': 'xiaohong', 'age': 19}]
+----------+----------+
| 姓名 | 年龄 |
+----------+----------+
| xiaoming | 13 |
| xiaoli | 15 |
| xiaogang | 16 |
| xiaomi | 18 |
| xiaohong | 19 |
+----------+----------+
输入学生的年龄:18
年龄低于18岁的学生信息如下:
+----------+----------+
| 姓名 | 年龄 |
+----------+----------+
| xiaoming | 13 |
| xiaoli | 15 |
| xiaogang | 16 |
+----------+----------+

输入重定向:

$ 命令   <  输入文件

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

Python之路,第九篇:Python入门与基础9的更多相关文章

  1. Python之路(第九篇)Python文件操作

    一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r",encoding = “utf ...

  2. python之路第二篇(基础篇)

    入门知识: 一.关于作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 10 == 10: name = 'allen' print name 以下结论对吗? ...

  3. python之路第一篇

    一.python环境的搭建 1.window下环境的搭建 (1).在 https://www.python.org/downloads/ 下载自己系统所需要的python版本 (2).安装python ...

  4. 【python之路1】python安装与环境变量配置

    直接搜索 Python,进入官网,找到下载,根据个人电脑操作系统下载相应的软件.小编的是windows os .下载python-2.7.9.msi 安装包  双击安装程序,进入安装步骤.在安装过程中 ...

  5. 【Python之路】第九篇--Python基础之线程、进程和协程

    进程与线程之间的关系 线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除.线程可与属于同一进程的其它线程共享进程所拥有的全 ...

  6. Python之路【第九篇】堡垒机基础&数据库操作

    复习paramiko模块 Python的paramiko模块,是基于SSH用于连接远程服务器并执行相关操作. SSHClient #!/usr/bin/env python #-*- coding:u ...

  7. Python开发【第九篇】:HTML (二)

    python[第十四篇]HTML基础 时间:2016-08-08 20:57:27      阅读:49      评论:0      收藏:0      [点我收藏+] 标签: 什么是HTML? H ...

  8. Python学习【第九篇】函数

    函数 函数是什么? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上而下实现功能,其往往用一段代码来实现指定功能,开发过 ...

  9. Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁

    本节内容: 进程与线程区别 线程 a)  语法 b)  join c)  线程锁之Lock\Rlock\信号量 d)  将线程变为守护进程 e)  Event事件 f)   queue队列 g)  生 ...

  10. Python开发【第九篇】:协程、异步IO

    协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是协程,协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切换回 ...

随机推荐

  1. Hadoop---18/06/03 20:15:52 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable starting yarn daemons

    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin- ...

  2. [LeetCode] 94. Binary Tree Inorder Traversal(二叉树的中序遍历) ☆☆☆

    二叉树遍历(前序.中序.后序.层次.深度优先.广度优先遍历) 描述 解析 递归方案 很简单,先左孩子,输出根,再右孩子. 非递归方案 因为访问左孩子后要访问右孩子,所以需要栈这样的数据结构. 1.指针 ...

  3. js 获取数组重复的元素

    //获取数组重复的元素 function refrain(arr) { var tmp = []; if(Array.isArray(arr)) { arr.concat().sort().sort( ...

  4. android apk瘦身

    1.在gradle使用minifyEnabled进行Proguard混淆的配置,可大大减小APP大小 通过Build.gradle进行配置 2.删除无用的Resource文件. 这个和上面的肯定不一样 ...

  5. Transactional参数说明

     参数  说明 readOnly 该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false.例如:@Transactional(readOnly=tru ...

  6. javascript 数组函数

    声明数组 var tmp=[];//简写模式 var tmp= new Array();//直接new一个 var tmp=array(); //直接new一个 在new数组的时候可以传入一个参数,表 ...

  7. python logging模块,升级print调试到logging。

    简介: 我们在写python程序的时候,很多时候都有bug,都是自己写的,自己造的孽,又的时候报错又是一堆,不知道是那部分出错了. 我这初学者水平,就是打print,看哪部分执行了,哪部分没执行,由此 ...

  8. angular4-http

    导入 Http 模块 import { HttpModule } from '@angular/http'; @NgModule({ imports: [BrowserModule, FormsMod ...

  9. NAND Flash vs NOR Flash

    Avinash Aravindan reference:https://www.embedded.com/design/prototyping-and-development/4460910/2/Fl ...

  10. linux自动更新代码,自动备份数据库,打包应用发布

    切换root用户 sudo su - 1.安装svn,mysql yum install subversion yum install mysql 2.安装 maven 下载:百度云盘地址为 http ...