本周学习python中的集合,以及字符串的部分属性。
集合是无序的不重复元素序列
含义即,多个相同的字符串,只占用一份空间,后续相同的都指向那份空间。相当于后续建立的内容就像是建立了一个“快捷方式”。
由于pycharm工具对字符串做了优化,所以最好直接使用windows系统下的cmd命令后台,输入python,然后进入交互式命令行中,感受字符串的驻留机制。
简单描述就是提升程序运行速率,节省内存空间
主要是通过练习掌握几种函数的使用方法。
虽然两种方式都可以,但是使用set()创建更加直观一些
注意创建空集合只能用set()创建了
'''一,使用{}创建'''
s={2,3,4,5,6,7,7,8,8} # 元素不能重复
print(s)
'''二,使用set()函数创建'''
s1=set(range(6))
print(s1,type(s1))
s2=set([1,2,33,4,5,6,66,7,77])
print(s2,type(s2))
s3=set((1,2,3,4,5,6,7))
print(s3,type(s3))
s4=set('python') # 这里可以看出集合是无序的
print(s4,type(s4))
'''转为集合再用函数还是集合'''
s5=set({12,4,6,23,45,55,66})
print(s5,type(s5))
'''定义一个空集合'''
s6={} #dict字典类型
print(s6,type(s6))
s7=set()
print(type(s7))
结果
{2, 3, 4, 5, 6, 7, 8}
{0, 1, 2, 3, 4, 5} <class 'set'>
{1, 2, 33, 4, 5, 6, 66, 7, 77} <class 'set'>
{1, 2, 3, 4, 5, 6, 7} <class 'set'>
{'p', 't', 'o', 'n', 'h', 'y'} <class 'set'>
{66, 4, 55, 6, 23, 12, 45} <class 'set'>
{} <class 'dict'>
<class 'set'>
update()插入的元素可以更多,discard()删不存在的元素不会报错
pop()和remove()删不存在的元素都会报错
s={10,20,30,405,60}
'''集合元素的判断'''
print(10 in s)
print(100 not in s)
'''集合元素的新增'''
'''add()每次只能添加一个元素'''
s.add(80)
print(s)
s.update({200,300,400})
print(s)
'''update()至少添加一个元素'''
s.update([100,99,98])
s.update([77,66,55])
print()
'''删除,若元素没有则报错'''
s.remove(100)
print(s)
# s.remove(500) # KeyError: 500
'''删除没有的元素不报错'''
s.discard(500)
s.discard(300)
'''随机干掉一个元素'''
s.pop()
'''没有参数传入,否则报错'''
# s.pop(400) # TypeError: set.pop() takes no arguments (1 given)
print(s)
s.clear() # 全部元素清空
print(s)
结果
True
True
{80, 20, 405, 10, 60, 30}
{200, 10, 300, 80, 400, 20, 405, 60, 30}
{98, 99, 66, 200, 10, 300, 77, 80, 400, 20, 405, 55, 60, 30}
{99, 66, 200, 10, 77, 80, 400, 20, 405, 55, 60, 30}
set()
先了解几种集合操作的概念,再练习熟悉函数的使用
'''两个集合是否相等,元素相同就相等'''
s1={10,20,30,40}
s2= {30,20,10,40}
s3=set(range(10,70,10))
print(s1==s2) # True
print(s1!=s2) # Flase
'''子集和集合,'''
print('--------子集和集合----------')
print(s2.issubset(s1)) #True
print(s2.issubset(s3)) #True
print(s3.issubset(s1)) #False
'''超集和集合'''
print('--------超集和集合----------')
print(s2.issuperset(s3)) # False
print(s3.issuperset(s2)) # True
'''交集与集合,没有交集为True,有交集则为False'''
print('--------交集和集合----------')
print(s2.isdisjoint(s3)) # False
s4={100,200,300}
print(s2.isdisjoint(s4)) # True
s1=set(range(10,50,10))
s2=set(range(10,70,10))
print('-------------交集------------')
print(s1.intersection(s2)) # 交集
print(s1 & s2) # 输出交集内容
print('-------------原集合------------')
print(s1)
print(s2)
print('-------------并集------------')
print(s1.union(s2))
print(s1 | s2)
'''差集是两个集合不共有的内容,以一个集合为标准'''
s1={10,20,30,40,44}
s2={10,20,30,40,50,60,66}
print('-------------差集------------')
print(s1.difference(s2))
print(s1-s2)
print('-------------原集合------------')
print(s1)
print(s2)
'''并集-交集'''
print('-------------对称差集------------')
print(s1.symmetric_difference(s2))
print(s1 ^ s2)
print((s1 | s2) - (s1 & s2))
结果
True
False
--------子集和集合----------
True
True
False
--------超集和集合----------
False
True
--------交集和集合----------
False
True
-------------交集------------
{40, 10, 20, 30}
{40, 10, 20, 30}
-------------原集合------------
{40, 10, 20, 30}
{40, 10, 50, 20, 60, 30}
-------------并集------------
{40, 10, 50, 20, 60, 30}
{40, 10, 50, 20, 60, 30}
-------------差集------------
{44}
{44}
-------------原集合------------
{20, 40, 10, 44, 30}
{66, 50, 20, 40, 10, 60, 30}
-------------对称差集------------
{66, 50, 44, 60}
{66, 50, 44, 60}
{66, 44, 50, 60}
s='hello,Python'
print('-----居中对齐------')
print(s.center(20,'*'))
print('-----左对齐------')
print(s.ljust(20,'*'))
print(s.ljust(10))
print(s.ljust(20))
print('-----右对齐------')
print(s.rjust(20,'*'))
print(s.rjust(20))
print(s.rjust(10))
print('-----右对齐,但使用0填充------')
print(s.zfill(20))
print(s.zfill(10))
print('-8910'.zfill(8))
结果
-----居中对齐------
****hello,Python****
-----左对齐------
hello,Python********
hello,Python
hello,Python
-----右对齐------
********hello,Python
hello,Python
hello,Python
-----右对齐,但使用0填充------
00000000hello,Python
hello,Python
-0008910
这个功能类似Excel分列的功能
s='hello world Python'
lst=s.split()
print(lst)
s1='hello|world|Python'
print(s1.split())
print(s1.split(sep='|'))
print(s1.split(sep='|',maxsplit=1)) # 从左侧开始劈分
'''rsplit()从右侧开始劈分'''
print(s1.rsplit())
print(s1.rsplit('|'))
print(s1.rsplit(sep='|',maxsplit=1)) # 从右侧开始劈分
结果
['hello', 'world', 'Python']
['hello|world|Python']
['hello', 'world', 'Python']
['hello', 'world|Python']
['hello|world|Python']
['hello', 'world', 'Python']
['hello|world', 'Python']
还是熟悉函数的使用,具体作用可以参照一开始概念中介绍的那张图
s='hello,python'
'''是否是合法的标识符'''
print('1.',s.isidentifier()) # False
print('2.','hello'.isidentifier())
print('3.','张三_'.isidentifier())
print('4.','张三'.isidentifier())
print('5.','\t'.isspace())
print('6.','abc'.isalpha())
print('7.','张三'.isalpha())
print('8.','张三1'.isalpha()) # False
print('9.','123'.isdecimal())
print('10.','123四'.isdecimal()) # False
print('11.','Ⅱ Ⅱ Ⅱ'.isdecimal()) # False
print('12.','123'.isnumeric())
print('13.','123'.isnumeric())
print('14.','Ⅱ Ⅱ Ⅱ'.isnumeric()) # False
print('15.','abc1'.isalnum())
print('16.','张三123'.isalnum())
print('17.','abc!'.isalnum()) # False
结果
1. False
2. True
3. True
4. True
5. True
6. True
7. True
8. False
9. True
10. False
11. False
12. True
13. True
14. False
15. True
16. True
17. False
本章学了很多的函数啊,虽然很多但还是要勤加练习才能逐渐进步啊,诸君共勉!!!