- List
- 八字口诀 : 建-增删改查操-切复
#五大金刚 : list、str、tuple、set(集合)、dict(字典)
#=====八种玩法=====
#【建】创建 - [],list(),range()
#【增】添加元素:append,insert,extend,+
#【删】删除元素的方法:del,pop,remove
#【改】修改元素的值
#【查】查询元素 [],index()
#【操】操作:loop,max,min,sum,sort,reverse
#【切】切片操作 start:end:step
#【复]推导式,map,filter - String
- Dict
- Tupple
- Set
List
八字口诀 : 建-增删改查操-切复
#五大金刚 : list、str、tuple、set(集合)、dict(字典)
#=====八种玩法=====
#【建】创建 - [],list(),range()
#【增】添加元素:append,insert,extend,+
#【删】删除元素的方法:del,pop,remove
#【改】修改元素的值
#【查】查询元素 [],index()
#【操】操作:loop,max,min,sum,sort,reverse
#【切】切片操作 start:end:step
#【复]推导式,map,filter
建-增-删
#建 - [],list(),range()
names_1 = ['zhangsan','lisi','wangwu']
#建2 list()可接受 iterable 可遍历的对象
names_2 = list() #创建一个空列表
names_2 = list(range(5)) #可以接受range
names_2 = list((1,2,3,4,5)) #元组
names_2 = list('maishu')
#增 append,insert,extend,+
names = []
names.append('maishu')
names.append('maiershu')
names.append(3)
names.append((3,5,4))
print(names)
#增2 insert
names.insert(3,886)
#插入下表超过长度,放在长度
#增3
bad_guys = ['麦叔',"小麦"]
# names.append(bad_guys) #作为元素插入
names.extend(bad_guys) #extend方法
# names += bad_guys #等同于extend
print(names)
#删1 del 运算符,不需要括号
#根据下标来删除
#根据内容来删除
# del names[4]
#删2 pop
#1. 默认删掉最后一个
#2. 可以指定下标
#3. 会返回pop值
#4. 下标索引越界,会抛出index 异常
# names.pop(10)
#删3 remove
#1. 只会删除第一个符合条件的数据
#2. 没有符合条件的,则抛出value Error
#3. 若要全部删除,可用if 判断列表中是否有该元素
if'xx' in names:
names(remove('xx'))
print(names)
names.remove('maishu')
print(names)
查-操
#查 : 查询元素[], index(), len()
#查 1: 下表从0开始,也可从-1开始(-1代表最后一个)
#下标越界会出现index error
#查2 由名字查下标
# 1. 如果有多个,查到第一个
# 2. 如果不存在,则抛出value error
print(names.index('maishu'))
#查3
#通过 in ,not in 来判定
if(886 not in names):
names.append(886)
else:
names.index(886)
#查4 len()
print(len(names))
#操:操作 loop,+,*,sort,reverse,max,min
#操1: loop
# for n in names:
# print('hello,',n)
# for index,n in enumerate(names):
# print(f'NO{index} is {n}')
#操2: 基本运算 + * ==
scores = [87,25,69,89]
print(names+scores) #与extend效果相同
print(scores * 3)
#操3:
print(scores)
#会修改原列表
scores.reverse()
print(scores)
scores.sort()
print(scores)
scores.sort(reverse=True)
print(scores)
#创建新的列表
print(sorted(scores))
print(sorted(scores,reverse=True))
#排序进阶
names_scores = [('zhangsan',87),('maishu',100),('lisi',88)]
print(sorted(names_scores))
#字符串的比较,字符串以此比较,按照字符顺序,前面一样大,长的算大
#通过 key 指定排列
print(sorted(names_scores, key=lambda n:n[1]))
#操 4 :
print(max(scores))
print(min(scores))
print(sum(scores))
切-复
#切片操作 start:end:step
a = 'maishu'
#1. 取单个数字
print(a[3])
#2. 取子串 a[start:end]不包括end
print(a[3:7])
#3. start end 取负数
print(a[-3:None])
#4. start 大于 end
print(a[4:3])
#返回空字符串
#5. 空的start或end
print(a[2:])
#6. 可用None代替空的start
print(a[None:3])
#复 : 推导式,comprehension map filter
# print(names)
# names2 = names[:]
nums = list(range(100))
# print(nums)
sq_nums = [n*n for n in nums]
# print(sq_nums)
nums_3 = [n+8 for n in nums if n%3==0]
print(nums_3)
print(list(map(lambda n:n+8, nums)))
String
基 - 建
# 基 1.字符串是一个字符序列(sequence),2.基于utf-8编码 -- 中文不会出现乱码 3. 对应str类
#编码:1.ASCII 256个字符 2. ISO-9995-2 3.ANSI 4.GBK,GB2312 5.UTF-8 包含了已知所有字符
# 字符串为序列
# for n in 'helloworld':
# print(n)
#打印字符串操作方法
# print(dir(str))
#小练习:给一个字符串,找出里边所有o的个数
string = 'helloworld'
num = 0
for n in string:
if n == 'o':
num += 1
# print(num)
#2. 建
#2.1 简单创建
zs = '张三'
ls = "李四"
ww = '''王五
dsf
sf'''
#2.2 转义字符,引号的相互嵌套
zs2 = '张\t三'
ls2 = 'lisi\'s'
ww2 = "wangwu's"
#2.3 构造方法
score = str(48)
增-删改-查
#3 增:字符串是immutable
name = 'zhangsan'
# name[-1] = 'm' 不可修改
# name2 = 'zhangsan' + 'm'
name2 = name[:-1] + 'm'
print(name2)
#字符串被重用
#同一个字符串在内存中只有一个
name3 = name
name4 = 'zhangsan'
print(id(name))
print(id(name3))
print(id(name4))
#删 - 不可能的
#改 - 不可能的
#6查
#6.1 通过下标来访问一个字符
shame = '打工是不可能打工的'
print(shame[5])
#6.2 子串是否存在 - numbership: in,not in
# print('可能' in shame)
# print('可能w' in shame)
print('可能w' not in shame)
# identity : is ,is not
print(type(shame) is str)
#6.3 开头 结尾
print(shame.startswith('打工'))
print(shame.endswith('的'))
#6.4 所在的下标
print(shame.index('可能'))
#找出所有姓张的名字
ls = ['张三','李四','王五','张长利','施耐庵']
for index,name in enumerate(ls):
if name.startswith('张'):
print(f'第{index+1}个名字为:{name}')
操
# 7 操作
#格式化输出
name = 'zhangsan '
greeting = 'hello,'+name + ',吃了吗'
g2 = 'hello,{name},吃了吗?'
print(g2.format(name=name))
#拆分
# names = '张三,李四,王五,张长利,施耐庵'
# for n in names.split(','):
# print(n)
#合并
h ='hello'
names2 = ['张三','李四','王五','张长利','施耐庵']
print(" - ".join(names2))
# print(h.join(name))
#输出:zhellohhelloahellonhelloghelloshelloahellonhello
#查找:出现次数,RE
nameniao = '我是一只小小小小小鸟'
name.count('小')
#改变大小写
zhangsan = 'zhangsan is a Cool Boy'
#字符开头大写
print(zhangsan.title())
#首字符大写
print(zhangsan.capitalize())
#全部大写
print(zhangsan.upper())
#全部小写
print(zhangsan.lower())
#大小写呼唤
print(zhangsan.swapcase())
#去空格
name8 = ' wangba '
print(name8.strip())
print(name8.lstrip())
print(name8.rstrip())
#替换
nameniao.replace('小','大')
#复制
namen = 'zhang'
namem = namen[:]
print(id(namen))
print(id(namem))
#比较
#一个一个的比过去,前面若都相同,长的赢
#小写字母大于大写字母
#按ASCII大小
print('maishu' > 'zhangsan')
Dict
基-建-增-删
#1. 基础 - 键值对 key:value, key必须是immutable的对象
s = {'zs':56,'ms':'88','hu':99}
s2= {'zs':{'zs':56,'ms':'88','hu':99},'ms':'88','hu':99}
#2.创建
s = dict([(1,99),(2,88),(3,99)]) #包含成对数据的iterable(可枚举)
names = ['sw','sg','rf','gt']
scores = [78,85,69,41]
s = dict(zip(names,scores)) #使用zip方法生成字典
#有key,value没有或者固定可用此方法生成
s3 = dict.fromkeys(names,5)
#4. 删除
del s['sw'] #删除不存在,则抛出KeyError
print(s.pop('sg')) #返回val值
print(s.popitem()) #随机删除
s.clear() #全部清空
改-查-操
#5. 改
names = ['sw','sg','rf','gt']
scores = [78,85,69,41]
s = dict(zip(names,scores)) #使用zip方法生成字典
s['sw'] = 88
#6. 查
print('sw' in s) #查key
#使用key访问val,不存在则抛出error
print(s.get('sw')) # 不存在,则返回none
print(s.setdefault('www','google.com'))
#7. 遍历字典
for k in s:
print(k,s[k])
print(list(s.keys()))
print(list(s.values()))
print(list(s.items()))
# 按key值排序
s2 = {k:v for k,v in sorted(s.items())}
# Python小技巧#7:如何给字典Dict按照value排序?
#9. copy 浅拷贝 复制一份,地址不同,但元素地址相同
s4 = s.copy()
s = dict(zip(['sw','sg','rf','gt'],[78,85,69,41])) #使用zip方法生成字典
s5 = {'ss':33,'sw':99}
s.update(s5) #没有则添加,有则覆盖
Tupple
#基建-增删改查抄-切复
#基本概念:tuple是一个有序的,不可改变的数据结构 immutable
l = [5,3,2] #list
t = (5,2,3) #tuple
#优点:1.快 2.安全 3.元组可被作为dict的key
# python -m timeit '[5,3,7]'
# python -m timeit '(5,3,7)'
#用tuple的地方:1.参数 2.其他不变的情况
#建
t1 = (5,3,7)
t2 = tuple([1,2,4])
t3 = tuple('maishu')
# t4 = tuple(5) #iterable 才可被转换
t5 = (5,) #(5)创建的为int类型 (5,)创建一个元素的tuple
#增删该 -- 不能
#a并非元组本身,只是一个指向内容的引用
a = (1,3,5)
print(id(a))
a = (8,3,5)
print(id(a))
#查
print(a[2])
#操 - 不能排序,反转
# a.sort()
#切 - 切片操作同 list
b = a[1:3]
#复
#复制不能写成 c=a
c = a[:]
Set
基-建-增-删
#1.基础:不能重复,不分先后,不收容可变的东西 只能加入immutable的内容
#可加入自己定义的对象
class Person:
def __init__(self,name):
self.name = name
p = Person('wangwu')
name = {'zs','ls','zs',p}
# print(name)
p.name = 'wangww'
# print(name)
#什么情况下用set
#不分先后,不会重复的场合
#建:创建
score = set()
#空大括号创建为字典类型 score = {}
#可被枚举(iterable)的对象就可被转换为set
score = set([4,5,6,5])
#3. 增
score.add('zs')
#4. 删
# score.remove('zs') #有就移除,没有就报错
score.discard('zs') #有就移除,没有不报错
# score.clear() #全部删除元素
#5. 改 - 没有顺序,无下标 没有改
#6. 查 in ,not in
score = set([4,5,6,5])
print(98 in score)
print(5 not in score)
print(score.pop()) #取出一个
#7. 操作:set集合
s1 = {1,2,3,4,5}
s2 = {3,4,5,6,8,9}
#合并
s3 = s1 | s2
s4 = s1.union(s2)
#交
s5 = s1 & s2
#差
s6 = s1 - s2
#异或
s7 = s1 ^ s2
#8.切片 --无
#9.复制
class Person:
def __init__(self,name):
self.name = name
p = Person('wangwu')
score.add(p)
s0 = score.copy()
print(s0)
#10. frozenset
ss = frozenset(s0)
print(ss)