python 基础三
数据类型
int
1,2,3用于计算
i = 100 print(i.bit_length()) ''' bit_length 1 0000 0001 1 2 0000 0010 2 3 0000 0011 2
一个十进制数字在二进制中需要几位。
bool
True,False 用于判断对错
在数字中非0为真True,只有0为假False,
在str()中‘’ 为假 其他为真
为什么 bool(0) 就是false bool(i) i = 0 就是True
ps: while True: pass while 1: 效率高 pass
1的效率更高因为程序要把True转换成数字再执行一遍
str
存储少量数据进行操作 比如说密码
索引
s= 'ABCDEFG'
切片顾头不顾尾
s[:-1] 反向查找
s[3::-2] 从3开始反向查找
字符串操作
capitallize() : 首字母大写
upper(): 全部大写
lower():全部小写
swapcase():大小写翻转
title(): 每个单词首字母大写
center(20,'~') : 居中填补空白默认空格填补
replace('A','B',num)
s = '设计费大理石街坊来到了街坊说法第三方' s11 = s.replace('街坊','老王') print(s11)
startwith : 是否是以。。。开头
endwith: 是否是以。。。结尾
find : 找不到返回-1
index: 找不到报错
centre : 内容居中
strip/rstrip/lstrip : 两边消除 左右消除指定符号,默认为空格
count 计数
len() 长度
split() 将字符串转换成列表
join() 将列表转换成字符串
for i in 可迭代对象
pass
format 的三种方式
{}:
s = '我叫{},今年{},爱好{},再说一下我叫{}'.format('太白','36','girl','太白') print(s)
{0}{1}{2}
name = input('>>>') s = '我叫{0},今年{1},爱好{2},再说一遍我叫{0}'.format(name,36,'girl') print(s)
{name}{age}{hobby}name = age + hobby
name = input('>>>') s = '我叫{name} , 今年{age} , 爱好{hobby} , 再说一次我叫 {name}'.format(age=18,name=name,hobby='girl') print(s)
list
可以存储大量的信息
增
li = ['alex',[1,2,3],'wusir','egon','女神','太白'] li.append('日天') # 只能从最后面插入 li.insert(4,'春哥') print(li) # 指定顺序插入 li.ext li.extend([1,2,3]) print(li) # 可迭代对象
删
li = ['太白','alex','wusir','egon','女神'] name = li.pop(1) # 从第一位删除 #pop()从最后一位删除 print(name,li) li = ['太白','alex','wusir','egon','女神'] lii = ['太白','alex','wusir','egon','女神'] li3 = ['太白','alex','wusir','egon','女神'] liiii = ['太白','alex','wusir','egon','女神'] #按元素清除 li.remove('太白') print(li) #全部清除 lii.clear() print(lii) #切片清除 del liiii[0:4] print(liiii)
改与列表的嵌套
li.replace() 列表加函数只是返回值而不是直接修改列表,要用返回值直接等于索引
li = ['taibai','武藤兰','元昊',['alex','egon',89],23] print(li[1][1]) name = li[0].capitalize() print (name) li[0] = name li[0] = li[0].capitalize() # li[0] = li[0].capitalize() li[2] = '大白' print(li[2].replace('大白','dada')) li[2] = li[2].replace('大白','dada') li[3][0] = li[3][0].upper() print(li)
sort sort(reverse) 所有自己写的算法都没有原装的快
查
li = [1,2,3,4,5,6,7,8,9] for i in li : print(i) print(li[0:2])
元组
只读,不能增删改的列表。
但是元组的子元素是可以改的。
tu = (1,2,3,'alex',[2,3,4,'taibai'],'egon') tu[4][3] = tu[4][3].upper() tu[4].append('sb') print(tu)
tu1 = (1,) 是元组
tu2 = (1) 不是元组
dict
关系型列表,键值对
dict key 必须是不可变的数据类型 ‘abc’ , 123 可哈希 value: 任意数据类型
dict 优点: 二分查找去查询,存储大量的关系型数据
缺点: 无序的
dic = { # 'name':['大猛','小孟'], # 'py9':[{'num':71,'avg_age':18,}, # {'num': 71, 'avg_age': 18, }, # {'num': 71, 'avg_age': 18, }, # ], # True:1, # (1,2,3):'wuyiyi', # 2:'二哥', # } # print(dic)
增
dic1['high'] = 132
键 值
如果键不错在直接在后面添加
如果存在直接更改
dic1.setdefault('键','值')
只会增加键,不会添加值 不写值的话
dic = dict.fromkeys([1,2,3],'春哥') print(dic) {1: '春哥', 2: '春哥', 3: '春哥'}
dic1['high'] = 185 #没有键值对,添加 # dic1['age'] = 16 #如果有键,则值覆盖 # dic1.setdefault('weight') # 有键值对,不做任何改变,没有才添加。 # dic1.setdefault('weight',150) # dic1.setdefault('name','二哥') # print(dic1)
删
dic.pop.('键') 删除键值对
dic.pop('键',None)
dic.popitem() 随机删除
dic.clear() 清空字典
改
dic [键] = 值
dic2.update(dic1) 把dic1的值添加到dic2
# dic1['age'] = 16 # dic = {"name":"jin","age":18,"sex":"male"} # dic2 = {"name":"alex","weight":75} # dic2.update(dic) # # # print(dic) # print(dic2)
查
dic.keys() 键 dic.values 值 dic.items() 键值对
# for i in dic1: # print(i) # for i in dic1.keys(): # print(i) # for i in dic1.values(): # print(i)
for k,v in dic1.items():
print(k,v)
嵌套
dic = { 'name':['alex','wusir','taibai'], 'py9':{ 'time':'1213', 'learn_money':19800, 'addr':'CBD', }, 'age':21 } # l = [1,2,'wusir'] # l[2] = l[2].upper() # dic['name'][1] = dic['name'][1].upper() # print(dic) #female : 6 # dic['py9']['female'] = 6 # print(dic)
集合
可变数据类型,里面的元素是不可变的数据类型且不可重复
{1,2,3,‘asdf’}
增
set1.add('内容') 整体添加
set1.update(“内容”)可迭代添加且无序
set1 = set({'dsfdsf',123,34324,3234})
set1.update('234')
print(set1)
{3234, '2', '4', '3', 'dsfdsf', 34324, 123}
删
set1.pop()随机删除
set1.remove() 按元素删除
set1.clear() 清空
查
交集
set1 & set2
set1.intersection(set2)
包含
set2 > set1
共有的
set1^set2
独有的
set1 - set2
去重
li = [1,2,33,33,2,1,4,5,6,6] # set1 = set(li) # # print(set1) # li = list(set1) # print(li)
range
range相当于一个数字列表 [1,2,3,.....,100]
# for i in range(0,10,3): # print(i) # for i in range(10,0,-2): # print(i) li = [1,2,3,5,'alex',[2,3,4,5,'taibai'],'afds'] # for i in li: # if type(i) == list: # for k in i: # print(k) # else: print(i) for i in range(len(li)): if type(li[i]) == list: for j in li[i]: print(j,11) else:print(li[i],2)
值互换
a = 1 b = 2
a,b = b,a
小数据池
数字,字符串 小数据池 #数字的范围 -5 -- 256 #字符串:1,不能有特殊字符 # 2,s*20 还是同一个地址,s*21以后都是两个地址 # i1 = 6 # i2 = 6 # print(id(i1),id(i2)) # i1 = 3 # i2 = 3 # print(id(i1),id(i2))
两个变量名用同一个地址,str,int在一定范围内
编码
在python的内存中所有变量都是unicode 32位 要想存储就要转化成utf-8 24位,gbk 16位 所以就要encode编码
把str 编程 byte类型 b
b 只能转化英文不能转化中文
s = 'alex' # s1 = b'alex' # print(s,type(s)) # print(s1,type(s1)) # s = '中国' # print(s,type(s)) # s1 = b'中国' # print(s1,type(s1)) s1 = 'alex' # encode 编码,如何将str --> bytes, () s11 = s1.encode('utf-8') s11 = s1.encode('gbk') print(s11) s2 = '中国' s22 = s2.encode('utf-8') s22 = s2.encode('gbk') print(s22) File "<ipython-input-5-b82dad48c344>", line 8 s1 = b'中国' ^ SyntaxError: bytes can only contain ASCII literal characters. b'alex' b'\xd6\xd0\xb9\xfa'
深浅copy
浅; 当 l2 复制 l1 时 里面的可变数据和不可变数据都是共有的 数据类型
int
1,2,3用于计算
View Code
一个十进制数字在二进制中需要几位。
bool
True,False 用于判断对错
在数字中非0为真True,只有0为假False,
在str()中‘’ 为假 其他为真
为什么 bool(0) 就是false bool(i) i = 0 就是True
View Code
1的效率更高因为程序要把True转换成数字再执行一遍
str
存储少量数据进行操作 比如说密码
索引
s= 'ABCDEFG'
切片顾头不顾尾
s[:-1] 反向查找
s[3::-2] 从3开始反向查找
字符串操作
capitallize() : 首字母大写
upper(): 全部大写
lower():全部小写
swapcase():大小写翻转
title(): 每个单词首字母大写
center(20,'~') : 居中填补空白默认空格填补
replace('A','B',num)
View Code
startwith : 是否是以。。。开头
endwith: 是否是以。。。结尾
find : 找不到返回-1
index: 找不到报错
centre : 内容居中
strip/rstrip/lstrip : 两边消除 左右消除指定符号,默认为空格
count 计数
len() 长度
split() 将字符串转换成列表
join() 将列表转换成字符串
for i in 可迭代对象
pass
format 的三种方式
{}:
View Code
{0}{1}{2}
View Code
{name}{age}{hobby}name = age + hobby
View Code
list
可以存储大量的信息
增
View Code
删
View Code
改与列表的嵌套
li.replace() 列表加函数只是返回值而不是直接修改列表,要用返回值直接等于索引
View Code
sort sort(reverse) 所有自己写的算法都没有原装的快
查
View Code
元组
只读,不能增删改的列表。
但是元组的子元素是可以改的。
View Code
tu1 = (1,) 是元组
tu2 = (1) 不是元组
dict
关系型列表,键值对
dict key 必须是不可变的数据类型 ‘abc’ , 123 可哈希 value: 任意数据类型
dict 优点: 二分查找去查询,存储大量的关系型数据
缺点: 无序的
View Code
增
dic1['high'] = 132
键 值
如果键不错在直接在后面添加
如果存在直接更改
dic1.setdefault('键','值')
只会增加键,不会添加值 不写值的话
dic = dict.fromkeys([1,2,3],'春哥')
print(dic)
{1: '春哥', 2: '春哥', 3: '春哥'}
View Code
删
dic.pop.('键') 删除键值对
dic.pop('键',None)
dic.popitem() 随机删除
dic.clear() 清空字典
改
dic [键] = 值
dic2.update(dic1) 把dic1的值添加到dic2
View Code
查
dic.keys() 键 dic.values 值 dic.items() 键值对
View Code
for k,v in dic1.items():
print(k,v)
嵌套
View Code
集合
可变数据类型,里面的元素是不可变的数据类型且不可重复
{1,2,3,‘asdf’}
增
set1.add('内容') 整体添加
set1.update(“内容”)可迭代添加且无序
View Code
删
set1.pop()随机删除
set1.remove() 按元素删除
set1.clear() 清空
查
交集
set1 & set2
set1.intersection(set2)
包含
set2 > set1
共有的
set1^set2
独有的
set1 - set2
去重
View Code
range
range相当于一个数字列表 [1,2,3,.....,100]
View Code
值互换
a = 1 b = 2
a,b = b,a
小数据池
View Code
两个变量名用同一个地址,str,int在一定范围内
编码
在python的内存中所有变量都是unicode 32位 要想存储就要转化成utf-8 24位,gbk 16位 所以就要encode编码
把str 编程 byte类型 b
b 只能转化英文不能转化中文
View Code
深浅copy
浅; 当 l2 复制 l1 时 里面的可变数据和不可变数据都是共有的,一个变另一个跟着变。
1 l1 = [1,2,[4,5,6],3] 2 l2 = l1 3 print(l1,id(l1)) 4 print(l2,id(l2)) 5 l1.append('ass') 6 print(l1,l2) 7 print(id(l1[2])) 8 print(id(l2[2])) 9 10 [1, 2, [4, 5, 6], 3] 2804444955968 11 [1, 2, [4, 5, 6], 3] 2804444955968 12 [1, 2, [4, 5, 6], 3, 'ass'] [1, 2, [4, 5, 6], 3, 'ass'] 13 2804445146304 14 2804445146304
深: 当l2复制l1时 里面的可变数据是私有的也就是说会存到不同的地址,二不可变数据则是共有的 也就是存在相同的地址。
import copy l1 = [1,2,[4,5,6],3] l2 = copy.deepcopy(l1) print(l1,id(l1)) print(l2,id(l2)) l1[2].append('a') print(l1,id(l1[2]),l2,id(l2[2])) [1, 2, [4, 5, 6], 3] 2804445220032 [1, 2, [4, 5, 6], 3] 2804445759360 [1, 2, [4, 5, 6, 'a'], 3] 2804445234048 [1, 2, [4, 5, 6], 3] 2804444955968
浙公网安备 33010602011771号