创建一个空集合要用s=set()
d={},默认代表字典 s=set()是空集合
集合内元素是无序的,不能通过一个角标获得内部元素
#集合创建和遍历
s={'林青霞','高圆圆','张曼玉'}
for ele in s:
print(ele)
#集合的添加
s = {'林青霞','高圆圆','华梦情'}
# s.add('zhang')
# print(s)
'''update# 将容器中元素遍历出来 添加到当前的集合中
# update中可以传递多个容器'''
s.update('efgh','xczbc',(1,2,3),[4,5])
print(s)
#输出{1, 2, 3, '梁宛聪', '华梦情', 4, 5, 6, '林青霞', '陈倩辉', '高圆圆'}
'''集合的删除'''
# s.remove(5) #如果有 直接删除 如果没有 程序报错eg:s.remove(6)
# s.clear() #清空
# s.pop() #随机删除集合内一个元素并有一个返回值,集合为空报错
s.discard(6) #如果有 直接删除 如果没有 程序不报错
print(s)
集合,子集,超集,并集,交集,差集
s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
# s=s1.issubset(s2) 是否为子集,返回bool值False
# s=s1.issuperset(s2) 是否为超集,返回bool值False
# s=s1.union(s2) 并集
# s=s1.intersection(s2) 交集
#s1.intersection_update(s2) #交集,但没有返回值,交集更新到s1
# s=s1.difference(s2) 差集,s1-s1和s2的合集
# s1.difference_update(s2) 差集,但没有返回值,更新s1
# s=s1.symmetric_difference(s2) 异或,s1和s2的并集-交集
s1.symmetric_difference_update(s2) # 异或,更新s1
print(s1)
集合的作用
# 集合的主要作用是对列表或者元素进行去重操作
# l = ['张三','李四','王五','张三']
t = ('张三','李四','王五','张三')
s = set(t)
print(s)
方法 | 说明 |
---|---|
isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True |
isdecimal() | 如果 string 只包含数字则返回 True |
islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True |
isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True |
startwith(str) | 检查字符串是否是以 str 开头,是则返回 True |
endswith(str) | 检查字符串是否是以 str 结束,是则返回 True |
str='00Da'
a=str.isalpha()
print(a)
a=str.isdecimal()
print(a)
a=str.islower()
print(a)
a=str.isupper()
print(a)
a=str.startswith('00D')
print(a)
a=str.endswith('Da')
print(a)
'''False False False False True True'''
字符串操作-查找和替换
方法 | 说明 |
---|---|
find(str, start=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1 |
rfind(str, start=0, end=len(string)) | 类似于 find(),不过是从右边开始查找 |
index(str, start=0, end=len(string)) | 跟 find() 方法类似,不过如果 str 不在 string 会报错 |
rindex(str, start=0, end=len(string)) | 类似于 index(),不过是从右边开始 |
replace(old_str, new_str, num=string.count(old)) | 返回一个新字符串,把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次 |
str = 'hellohl'
#从左往右查找 只要找到就结束了
#a=str.find('l')
#可以指定开始和结束的位置 在这个范围内查找
a=str.find('l',4,len(str)) #区间左闭右开 右边的值可以写到很大
print(a) #6
a=str.rfind('l',2,5)
print(a) #3
# index和find区别 不存在会报错
a=str.index('e')
print(a) #1
a=str.replace('l','hah',4) #4表示最多的替换次数
print(a) #hehahhahohhah,将4改为2输出hehahhahohl
拆分和连接
方法 | 说明 |
---|---|
partition(str) | 返回元组,把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面) |
rpartition(str) | 类似于 partition() 方法,不过是从右边开始查找 |
split(str=“”, num) | 返回列表,以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 ‘\r’, ‘\t’, ‘\n’ 和空格 |
splitlines() | 返回列表,按照行(’\r’, ‘\n’, ‘\r\n’)分隔 |
string1 + string2 | 拼接两个字符串 |
join(seq) | 返回字符串,以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
str = '''hello'''
a=str.partition('e') #('h', 'e', 'llo')
print(a)
a=str.split('l',1)
print(a) #['he', 'lo']
a=str.splitlines()
print(a)
# 传递容器参数 返回字符串
# 字符串元素的分割
a=str.join('tkjght')
print(a) #thellokhellojhelloghellohhellot
s = str.join(['1','2','3'])
print(s) #1hello2hello3
大小写转换
方法 | 说明 |
---|---|
lower() | 返回新字符串,转换 string 中所有大写字符为小写 |
upper() | 返回新字符串,转换 string 中的小写字母为大写 |
str = '''Dell2'''
a=str.lower()
print(a) #qell2
a=str.upper()
print(a) #QELL2
#文本对齐
str = 'hello'
# 默认用空格补充到当前长度
s = str.ljust(10,'-')
print(s) #hello-----
s = str.rjust(10,'-')
print(s) #-----hello
s = str.center(10,'-')
print(s) #--hello---
去除字符串左右边的空白
str = '---hello---'
s = str.strip('-')
print(s) #hello
字典
分类 | 方法 | 说明 |
---|---|---|
查询 | 字典[键] | 根据键取值,键值对不存在会报错 |
字典.get(键) | 根据键取值,键值对不存在不会报错 | |
字典.keys() | 可进行遍历,获取所有键 | |
字典.values() | 可进行遍历,获取所有值 | |
字典.items() | 可进行遍历,获取所有(键,值) | |
遍历 | for key in 字典 | 取出元组中的每个元素的 key |
d = {'china':'中国','england':'英国','france':'法国'}
a=d['china']
print(a) #中国
a=d.get('france')
print(a) #法国
# 视图对象 可以转换为列表
# 视图对象不能进行操作
print(d.keys()) #dict_keys(['china', 'england', 'france'])
print(list(d.values())) #['中国', '英国', '法国']
# 返回条目的视图对象 列表嵌套元组
print(d.items()) #dict_items([('china', '中国'), ('england', '英国'), ('france', '法国')])
for a in d:
print(a) '''#china
england
france '''
print(d) #{'china': '中国', 'england': '英国', 'france': '法国'}
字典增加,删除,修改
分类 | 方法 | 说明 |
---|---|---|
增加 | 字典[键]=值 | 键不存在,会添加键值对;键存在,会修改键值对的值 |
字典.setDefault(键,数据) | 键值对不存在,添加键值对;存在则不做处理 | |
删除 | del 字典[键] | 删除指定的键值对 |
字典.pop(键) | 删除指定键值对,返回被删除的值 | |
字典.clear() | 清空字典 | |
修改 | 字典[键]=数据 | 键不存在,会添加键值对;键存在,会修改键值对的值 |
字典.update(key=value) | 取出字典2的键值对,键值对不存在,添加键值对;存在则修改值 |
字典遍历
d = {'china':'中国','england':'英国','france':'法国'}
# 视图对象 列表嵌套元组 [(key,value),(key,value)]
items = d.items() #items为一个列表,列表元素为元组,元组内包括键和值
for key,value in items:
print(key,' ',value)
'''中国
英国
法国'''
函数 | 描述 | 备注 |
---|---|---|
len(item) | 计算容器中元素个数 | |
del item | 删除变量 | |
max(item) | 返回容器中元素最大值 | 字典只比较key |
min(item) | 返回容器中元素最小值 | 字典只比较key |
cmp(item1,item2) | 比较两个值,-1是小于,0是相等,1是大于 | python3取消了这个函数 |
运算符 | 描述 | 支持的数据类型 |
---|---|---|
+ | 合并 | 字符串、列表、元组 |
* | 重复 | 字符串、列表、元组 |
in | 是否存在(字典中判断键) | 字符串、列表、元组、集合、字典 |
not in | 是否不存在(字典中判断键) | 字符串、列表、元组、集合、字典 |
> >= == < <= | 比较 | 字符串、列表、元组? |
切片
格式:字符串[开始索引:结束索引:步长]
切片注意:
•1.指定的区间是属于左闭右开型 ,包含开始索引,不包含结束索引
•2.步长默认为1,可以省略
•3.从头开始,开始索引数字可以省略,冒号不能省略
•4.到末尾结束,可以直接在开始索引后加上:
str = "中华人名共和国欢迎您"
# 把字符串中从第一个到倒数第二个(不包含)打印出来
# newStr = str[0:-2:1]
# print(newStr)
# 从倒数第五个到倒数第一个(不包含)
# newStr = str[-5:-1:1] #左闭右开
# print(newStr)
# 从倒数第四个到最后(包含最后)
print(str[-4:10])
步长为负值时倒序索引
str = "中华人名共和国欢迎您"
# 把从角标为2到7(包含)倒序打印出来
# 人名共和国欢
newStr = str[2:8:-1] #错误,因该8在开始的位置
# newStr = str[-3:1:-1]
# newStr = str[7:1:-1]
print(newStr)
列表 元组 集合 字典推导式
# 2.创建包含1到100中所有偶数的列表
# l = [ele for ele in range(1,101) if ele%2==0]
综合练习
'''
需求:
判断用户输入的日期是否为有效日期
用户可以输入"20170229"
判断是否是有效日期,如"20170229"不是有效日期,"20171345"不是有效日期
分析:
1.输入日期
2.判断长度
3.是否全是数字
4.月是否满足:>=1 <=12
5.日 根据平年还是闰年 每个月日期
'''
# 平年每个月对应的天数
p = [0,31,28,31,30,31,30,31,31,30,31,30,31]
# 闰年每个月对应的天数
r = [0,31,29,31,30,31,30,31,31,30,31,30,31]
while True:
# 1.输入日期
date = input('请输入日期:')
# 2.判断长度
if len(date) != 8:
print('日期不合法,重新输入')
continue
# 3.是否全是数字
if not date.isdecimal():
print('日期必须全是数字')
continue
# 年月日
year = int(date[:4])
month = int(date[4:6])
day = int(date[6:])
# 4.月是否满足:>=1 <=12
if month<1 or month>12:
print('月份不满足')
continue
# 判断平年还是闰年
monthDay = 0
if (year%4==0 and year%100!=0) or year%400==0:
monthDay = r[month]
else:
monthDay = p[month]
# 5.日根据平年还是闰年每个月日期
if day>monthDay:
print('日期不满足')
continue
break
print('日期满足')
索引
字典是键值对,目的存储复杂数据
eval变成原来的类型