一、while循环:
while 条件:
循环体
二、预算符与他的优先级
优先级从高到低:
1.正负号:+X , -X
2.乘除法和取余数:* / %
3.加、减法:+ -
4.移位运算:>> , <<
(左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。
右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数)
5.按位与运算: &
6.按位异或运算:^ (按位异或运算符:当两对应的二进位相异时,结果为1)
7.按位或:"|"
8.比较: <,<=,>,>=,!=,==
9.同一性测试: is not, not
10 .成员测试:in, not in
11 .逻辑运算符: not
12 .逻辑运算符:and
13.逻辑运算符:or
14.Lambda #运算优先级最低
思考题:
print(1 and 2 or 3 and 4)
#输出 2
# 先计算and,"x and y" 如果 x 为 False,x and y 返回 False,否则返回y的值;
后计算or, "x or y" 如果 x为真则返回x的值,否则返回y的值
三、字符串、列表、字典的操作汇总
1)字符串和列表相通的操作
① 切片和按索引查找
s1 = "abcdefg"
L1=[1,2,3,4,5,6,7,8]
# 按索引查找
s = s1[1] # b
s = s1[-1] # g
l = L1[1] # 2
l = L1[-1] # 8
###切片
#正序
s = s1[1:3] # 顾头不顾尾,默认步长1 "bc"
s = s1[1:6:2] #步长为2, "bdf"
l = L1[1:3] # [2,3]
l = L1[1:6:2] # [2,4,6]
#倒序
s = s1[-1:-6:-1] # gfedc
l = L1[-1:-6:-1] # [8, 7, 6, 5, 4]
2)字符串常用操作方法
① upper lower 字符串大小写
② replace 替换字符串
s1="abcdabcdabcdabcd"
s2 = s1.replace("abc", "-") # -d-d-d-d 默认是全部替换的
s3 = s1.replace("abc", "-", 2) #-d-dabcdabcd 替换两次
③ strip:
去除字符串首尾的 空白(空格、/t 、/n)
也可以去除指定字符序列
补充:lstrip 去除左边的字符串
rstrip 去除右边的字符串
s1 = " 123 "
s2 = s1.strip() # "123"
s3 ="qwerer成r果qweq"
s4 = s3.strip("qe") # werer成r果qw 去除的是qe字符序列,q,e,qe, eq, qqq等都算
④ split:
默认按空格分割,返回一个列表。
也可以按指定的字符分割,也是返回一个列表。
s1 = "a b c"
s2 = s1.split() # ["a","b","c"]
s3 = "a:b:c"
s4 = s3.split(":") # ["a","b","c"]
⑤ join :
连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串,元素必须是字符串
s1 = "abc"
s2 = "-".join(s1) # a-b-c
L1=["a","b","c"]
s3 = "-".join(s1) # a-b-c
⑥ count:
计算字符串中某个字符出现的次数,可以选择从第几位开始和第几位结束,索引开始为0
s1="aaaabbbbcccc"
n = s1.count("a") # 4
n2 = s1.count("a", 1,3) # 2, 同样是顾首不顾尾
⑦ format : 格式化输出
⑧ is 系列:
isalnum():字符串是否由字母或数字组成
isalpha(): 字符串是否只由字母组成
isdecimal():字符串是否只由十进制组成
3)列表的增删改查,深浅拷贝
增:
① append:在列表末尾追加
② extend:在末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
③ insert:将指定对象插入列表的指定位置
***遇到的坑,以上三个函数没有返回值!!!
# 以append为例子
# 错误的写法,返回None
l = [1,2,3,4]
l1 = l.append(5) # l1返回None
# 如果需要l1有值,需要先copy
l1 = l.copy()
l1.append(5) #此时l1是 [1,2,3,4,5]
删:
① pop: 按照索引位置删除,默认是删除最后一个,返回值是被删除的元素
l = [1,2,3,4,5]
n = l.pop[0] # n =1, l = [2,3,4,5]
② remove:指定元素删除,如果有重名元素,默认删除从左数第一个
l1 = ["a", "b", "c", "d", "a"]
l1.remove('a') # ["b", "c", "d", "a"]
③ clear: 清空列表 list.clear()
④ del:
l = [1,2,3,4,5]
#可以按照索引删除
del l[-1] # [1,2,3,4]
#可以按照切片(步长)删除
del l[1:3] #[1,4,5]
#可以删除整个列表
del l # []
改:
① 按索引改
② 按切片步长改
查:
① 按索引或者切片步长查询
深浅拷贝:
① 浅拷贝:根据示例可以看出,浅拷贝嵌套的可变的数据类型是同一个。
也就是说我如果修改 l1列表中的变量[4,5],那么l2中的变量也会随之改变。
l1 = [1,2,3,[4,5]]
l2 = l1.copy()
print(id(l1)) #地址:140309423513544
print(id(l2)) #地址:140309424351048
print(id(l1[-1])) #地址 140309423513480
print(id(l2[-1])) #地址 140309423513480
② 深拷贝:根据示例可以看出,浅拷贝嵌套的可变的数据类型不是同一个。
也就是说我如果修改 l1列表中的变量[4,5],那么l2中的变量不会受到影响。
import copy
l1 = [1,2,3,[4,5]]
l2 = copy.deepcopy(l1)
print(id(l1)) #地址:140184249885128
print(id(l2)) #地址:140184250047496
print(id(l1[-1])) #地址:140184249886536
print(id(l2[-1])) #地址:140184250047560
4)元组,以及拆包
元组:重要数据,用户名,密码,个人信息,不想让别人改动的一些数据,存在元组中。
元组拆包:
a, b = (1, 2) # 多一个少一个都不行
print(a,b) # 1 2
c = (1,2)
a,b = c
print(a,b) # 1 2
5)字典相关
① 字典的3种创建方式(面试用)
# 方式一:
dic = dict((('one', 1), ('two', 2), ('three', 3)))
print(dic) # {'one': 1, 'two': 2, 'three': 3}
# 方式二:
dic = dict(one=1, two=2, three=3)
print(dic)
# 方式三:
dic = dict({'one': 1, 'two': 2, 'three': 3})
print(dic)
#方式4:fromkeys
dic = dict.fromkeys('abc', 100) #{'abc':100}
dic = dict.fromkeys([1, 2, 3], 'alex') # {1:'alex', 2:'alex', 3:'alex'}
# 坑:值共有一个,面试题
dic = dict.fromkeys([1,2,3],[])
dic[1].append(666)
print(dic) # {1: [666], 2: [666], 3: [666]} 值是一个地址
② 字典的增删改查
增:
dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
# 方式一:直接增加,有则改之
dic["sex"] = "男" #增
dic["age"] = 30 # 改
# 方式二:setdefault 无则加之,有则不改
dic.setdefault('hobby')
dic.setdefault('hobby', '球类运动')
dic.setdefault('age', 45)
print(dic) # {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车'], 'hobby': None}
#方式三:update,有则覆盖,无则增加
dict.update(dict2)
dic = {'name': '太白', 'age': 18}
dic.update(hobby='运动', hight='175')
dic.update({'name':'太白金星'})
dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')])
删:
dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
# 方式一:pop删除,通过键,删除键值对,返回被删除的键的值
dic.pop('age')
ret = dic.pop('age')
ret = dic.pop('hobby','没有此键') #pop还可以设置第二个参数,如果键不存在的时候,就会返回第二个值,这样就避免了报错
print(ret) # 18 是pop返回的值
print(dic)
#方式二:clear 清空
dic.clear()
print(dic) # {}
#方式三:del
del dic['age']
del dic['age1'] #键不存在的时候会报错
改:直接改
dic['name'] = 'alex'
print(dic)
查:
#方式1:直接查
print(dic['hobby_list'])
print(dic['hobby_list1']) # 没有键的时候就会报错
#方式2:get方法 推荐!!!
l1 = dic.get('hobby_list')
l1 = dic.get('hobby_list1','没有此键sb') # 可以设置返回值,这样没有键的时候也不会报错了
print(l1)
字典三个重要的方法 :keys(),values(),items()
dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
print(dic.keys()) # dict_keys(['name', 'age', 'hobby_list'])
#转换成列表
print(list(dic.keys())) #['name', 'age', 'hobby_list']
################
print(dic.values()) # dict_values(['太白', 18, ['直男', '钢管', '开车']])
#转换成列表
print(list(dic.values())) #['太白', 18, ['直男', '钢管', '开车']]
################
print(dic.items()) # dict_items([('name', '太白'), ('age', 18), ('hobby_list', ['直男', '钢管', '开车'])])
print(list(dic.items())) #[('name', '太白'), ('age', 18), ('hobby_list', ['直男', '钢管', '开车'])]
四、集合相关
1)集合的创建
set1 = set({1, 3, 'Barry', False})
set2 = {1, 3, '太白金星', 4, 'alex', False, '武大'} #这个不是字典
print(set1)
# 空集合
# set3 = {} 这不是空集合,这是空字典
set3 = set()
2)集合的增删改查
增
set1 = {'太白金星', '景女神', '武大', '三粗', 'alexsb', '吴老师'}
set1.add("py")
#update迭代着增加
set1.update('fdsafgsd')
print(set1) #{'f', '武大', 's', 'd', '景女神', 'g', 'a', '三粗', '太白金星', '吴老师', 'alexsb'}
删:
# remove 按照元素删除
set1.remove('alexsb')
print(set1)
# pop 随机删除
set1.pop()
print(set1)
改:
# 先删除再增加
set1.remove('太白金星')
set1.add('男神')
print(set1)
3)集合的关系:
# 交集
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1 & set2) #{4, 5}
# 并集:
print(set1 | set2) #{1, 2, 3, 4, 5, 6, 7, 8}
# 差集 -
print(set1 - set2) #{1, 2, 3}
# 反交集
print(set1 ^ set2) #{1, 2, 3, 6, 7, 8}
# 子集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1 < set2) #true
# 超集
print(set2 > set1) #true
- 列表去重
# 列表的去重 ***
l1 = [1,'太白', 1, 2, 2, '太白',2, 6, 6, 6, 3, '太白', 4, 5, ]
set1 = set(l1)
l1 = list(set1)
print(l1)
网友评论