您的当前位置:首页正文

Python自学记录-第5周

2024-11-30 来源:个人技术集锦

Python自学记录目录






前言

本周学习python中的集合,以及字符串的部分属性。


一、集合

1.概念

集合是无序的不重复元素序列

2.性质

  • 可变类型序列
  • 没有value的字典
  • 无序的

3.使用说明

  • set()或{}创建
  • 空的集合必须用set()创建
  • 也具有增删改查功能
  • 可以判断子集、交集、并集、差集、超集和对称差集(全是数学概念,汗颜~)

二、字符串的部分特性

1.驻留机制

含义即,多个相同的字符串,只占用一份空间,后续相同的都指向那份空间。相当于后续建立的内容就像是建立了一个“快捷方式”。

2.使用场景

由于pycharm工具对字符串做了优化,所以最好直接使用windows系统下的cmd命令后台,输入python,然后进入交互式命令行中,感受字符串的驻留机制。

3.驻留机制优点

简单描述就是提升程序运行速率,节省内存空间

3.判断字符串操作的方法

主要是通过练习掌握几种函数的使用方法。

三、实例

1.创建集合

虽然两种方式都可以,但是使用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'>

2.集合的增删改查

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()

3.集合的操作

先了解几种集合操作的概念,再练习熟悉函数的使用

'''两个集合是否相等,元素相同就相等'''
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}

4.字符串的操作-对齐

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

5.字符串的操作-劈分

这个功能类似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']

4.字符串的操作-其他函数

还是熟悉函数的使用,具体作用可以参照一开始概念中介绍的那张图

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

总结

本章学了很多的函数啊,虽然很多但还是要勤加练习才能逐渐进步啊,诸君共勉!!!

显示全文