一、字符串:
(1)字符串:就是由零个或多个字符组成的有限序列
(2)常用代码:
通过len函数计算字符串的长度
str1 = 'hello, world!'
print(len(str1))
运行结果:13
获得字符串首字母大写的拷贝
print(str1.capitalize())
运行结果:Hello, world!
从字符串中查找子串所在位置
print(str1.find('or'))
运行结果:8
print(str1.find('shit'))
运行结果:-1
与find类似但找不到子串时会引发异常
print(str1.index('or'))
运行结果:8
print(str1.index('shit'))
运行结果:Traceback (most recent call last):
File "d:/python3/day04.py", line 7, in <module>
print(str1.index('shit'))
ValueError: substring not found
检查字符串是否以指定的字符串开头
print(str1.startswith('He'))
运行结果:False
检查字符串是否以指定的字符串结尾
print(str1.endswith('!'))
运行结果:True
将字符串以指定的宽度居中并在两侧填充指定的字符
print(str1.center(50, '*'))
运行结果:******************hello, world!*******************
将字符串以指定的宽度靠右放置左侧填充指定的字符
print(str1.rjust(50, ' '))
运行结果: hello, world!
从字符串中取出指定位置的字符(下标运算)
str2 = 'abc123456'
print(str2[2])
运行结果:c
字符串切片(从指定的开始索引到指定的结束索引)
print(str2[2:5])
print(str2[2:])
print(str2[::2])
print(str2[::-1])
print(str2[-3:-1])
运行结果:
c12
c123456
c246
ac246
654321cba
45
检查字符串是否由数字构成
print(str2.isdigit())
运行结果:False
检查字符串是否以字母构成
print(str2.isalpha())
运行结果:False
检查字符串是否以数字和字母构成
print(str2.isalnum())
运行结果:True
获得字符串修剪左右两侧空格的拷贝
str3 = ' [email protected] '
print(str3.strip())
print(str3.lstrip())
print(str3.rstrip())
运行结果:
jackfrued@126.com
jackfrued@126.com
jackfrued@126.com
python常用的数据结构:列表、元组、集合和字典
列表:[ ]、也可以进行切片操作,可以修改元素
定义列表: list1 = [1, 3, 5, 7,100]
列表的乘法:
list2 = ['hello'] * 5
print(list2)
运行结果:['hello', 'hello', 'hello', 'hello', 'hello']
下标(索引)运算:
print(len(list2))
运行结果:5
添加元素:
list2.append(200)
print(list2)
运行结果:['hello', 'hello', 'hello', 'hello', 'hello', 200]
删除元素:
list2.remove(200)
print(list2)
运行结果:['hello', 'hello', 'hello', 'hello', 'hello']
注:
1、sorted函数返回列表排序后的拷贝不会修改传入的列表
2、通过key关键字参数指定根据字符串长度进行排序而不是默认的字母表顺序
3、sort给列表对象发出排序消息直接在列表对象上进行排序
4、 用列表的生成表达式语法创建列表容器
f = [x + y for x in 'ABCDE' if x == 'A' for y in '1234567'] print(f)
5、通过生成器可以获取到数据但它不占用额外的空间存储数据, 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f)) # 相比生成式生成器不占用存储数据的空间
print(f)
for val in f:
print(val)
6、Python中还有另外一种定义生成器的方式,就是通过yield关键字将一个普通函数改造成生成器函数
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
yield a
元组:( )、元组的元素不能修改
定义元组:
t = ('wjl',22,True,'内蒙古') print(t) 运行结果:('wjl', 22, True, '内蒙古')
获取元组中的元素:
print(t[0]) 运行结果:wjl
遍历元组中的值:
for member in t:
print(member)
运行结果:
wjl
22
True
内蒙古
将元组转换成列表
person = list(t)
print(person)
运行结果:['wjl', 22, True, '内蒙古']
将列表转换成元组
fruits_list = ['apple', 'banana', 'orange']
fruits_tuple = tuple(fruits_list)
print(fruits_tuple)
运行结果:('apple', 'banana', 'orange')
注:
1、如果不需要对元素进行添加、删除、修改的时候,可以考虑使用元组,当然如果一个方法要返回多个值,使用元组也是不错的选择
2、元组在创建时间和占用的空间上面都优于列表。我们可以使用 sys 模块的 getsizeof 函数来检查存储同样的元素的元组和列表各自占用了多少内存空间
集合:{ }、不允许有重复元素,而且可以进行交集、并集、差集等运算、remove的元素如果不存在会引发KeyError、
创建集合:
set2 = set(range(1, 10))
print(set2)
运行结果:{1, 2, 3, 4, 5, 6, 7, 8, 9}
遍历元素并进行运算:
for elem in set2:
print(elem ** 2, end=' ')
print()
运行结果:
1
4
9
16
25
36
49
64
81
将元组转换成集合:
set3 = set((1, 2, 3, 3, 2, 1))
print(set3)
运行结果:{2, 3}
集合的交集、并集、差集、对称差运算
print(set1 & set2)
# print(set1.intersection(set2))
print(set1 | set2)
# print(set1.union(set2))
print(set1 - set2)
# print(set1.difference(set2))
print(set1 ^ set2)
# print(set1.symmetric_difference(set2))
# 判断子集和超集
print(set2 <= set1)
# print(set2.issubset(set1))
print(set3 <= set1)
# print(set3.issubset(set1))
print(set1 >= set2)
# print(set1.issuperset(set2))
print(set1 >= set3)
# print(set1.issuperset(set3))
字典:{ }、可以存储任意类型对象,与列表、集合不同的是,字典的每个元素都是由一个键和一个值组成的“键值对”,键和值通过冒号分开。
注:
1、字典的一切操作都是通过键名操作键值!!!
2、字典是无序的,没有索引操作,除非转换成有序字典
创建字典并且通过键获取对应的值:
scores = {'小黄鸭': 88, '哆啦A梦': 66, '大白': 23}
print(scores['哆啦A梦'])
运行结果:66
对字典进行遍历(遍历的其实是键再通过键取对应的值)
for elem in scores:
print('%s\t--->\t%d' % (elem, scores[elem]))
运行结果:
小黄鸭 ---> 88
哆啦A梦 ---> 66
大白 ---> 23
更新字典中的元素
scores['大白'] = 99
print(scores)
运行结果:{'小黄鸭': 88, '哆啦A梦': 66, '大白': 99}
get方法也是通过键获取对应的值但是可以设置默认值
print(scores.get('小黄鸭', 88))
运行结果:88
删除字典中的元素
print(scores.popitem())
运行结果:('大白', 99)
# 同时获取键值对
# for key,value in dict_.items():
# print(key,value)
# 获取键名
print(dict_.keys())
# 获取键值
print(dict_.values())