Python之路,第九篇:Python入门与基础9
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的更多相关文章
- Python之路(第九篇)Python文件操作
一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r",encoding = “utf ...
- python之路第二篇(基础篇)
入门知识: 一.关于作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 10 == 10: name = 'allen' print name 以下结论对吗? ...
- python之路第一篇
一.python环境的搭建 1.window下环境的搭建 (1).在 https://www.python.org/downloads/ 下载自己系统所需要的python版本 (2).安装python ...
- 【python之路1】python安装与环境变量配置
直接搜索 Python,进入官网,找到下载,根据个人电脑操作系统下载相应的软件.小编的是windows os .下载python-2.7.9.msi 安装包 双击安装程序,进入安装步骤.在安装过程中 ...
- 【Python之路】第九篇--Python基础之线程、进程和协程
进程与线程之间的关系 线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除.线程可与属于同一进程的其它线程共享进程所拥有的全 ...
- Python之路【第九篇】堡垒机基础&数据库操作
复习paramiko模块 Python的paramiko模块,是基于SSH用于连接远程服务器并执行相关操作. SSHClient #!/usr/bin/env python #-*- coding:u ...
- Python开发【第九篇】:HTML (二)
python[第十四篇]HTML基础 时间:2016-08-08 20:57:27 阅读:49 评论:0 收藏:0 [点我收藏+] 标签: 什么是HTML? H ...
- Python学习【第九篇】函数
函数 函数是什么? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上而下实现功能,其往往用一段代码来实现指定功能,开发过 ...
- Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁
本节内容: 进程与线程区别 线程 a) 语法 b) join c) 线程锁之Lock\Rlock\信号量 d) 将线程变为守护进程 e) Event事件 f) queue队列 g) 生 ...
- Python开发【第九篇】:协程、异步IO
协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是协程,协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切换回 ...
随机推荐
- 浅谈MVVM
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致. 唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewMod ...
- 连接zookeeper+solr的服务器超时
在连接zookeeper+solr的服务器超时,如果检查各ip地址都没有变动,各部分工程也没有书写问题,那么连接超时,就可能是该服务器内存分配过少,性能不足的问题,扩大该服务器内存即可.
- Linux变量及运算
变量赋值:var=var_value 变量引用:$var 算术运算:var=`expr $var1 + $var2` 字符串连接:var=str$var1 数值比较:-eq/-ne/-gt/-lt/- ...
- find中的-exec参数
1.find中的-exec参数 在当前目录下(包含子目录),查找所有txt文件并找出含有字符串"bin"的行 find ./ -name "*.txt" -ex ...
- JNDI学习总结(一)——JNDI数据源的配置(转)
一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Conn ...
- error TS2304: Cannot find name 'Promise' && TS2307: Cannot find module '**'
error TS2304: Cannot find name 'Promise' 解决方法:在编译选项中加入"target":"es6" { "ver ...
- Linux系统默默改变了人类世界的生活方式
你知道操作系统都有些什么吗?Windows啊.这是我在上大学之前的问答,我当时认为只一种叫做Windows的操作系统,可是我错了,当我上大学以后,作为计算机专业的一名学生的时候我第一次接触到了除Win ...
- Resharper插件如何启用原VS的智能提示
第一步:vs2015选择工具—>选项—>文本编辑器—>C#—>常规—>语句结束,勾选自动列出成员,如下图: 第二步: 关闭Resharper智能提示,并设置为Visual ...
- JavaScript -基础- 函数与对象(二)String
一.判断数据类型typeof与判断对象类型instanceof 1.typeof typeof只能判断基础数据类型,无法判断引用数据类型 <script> var s="hell ...
- vue-10-混合
混合对象可以包含任意组件选项, // 定义一个混合对象 var myMixin = { created: function () { this.hello() }, methods: { hello: ...