python学习5__容器编程

创建一个空集合要用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变成原来的类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值