基础
高级语言:
编译型语言执行速度快,不依赖语言环境运行,跨平台差,如C,C++
解释型语言跨平台好,一份代码,到处使用,缺点是执行速度慢,依赖解释器运行,如python,PHP
变量的作用:标记数据,存储数据
变量定义规则:变量名只能是字母,数字或下划线的任意组合。第一个字不能是数字。关键字不能声明为变量。
Python单行注释用 # 单行注释用三对单引号 ''' ''' 。
数据类型:整形int(),浮点型,字符串str(),布尔类型 Ture,False 一般用于逻辑判断
获取一个字符串的地址用 id
字符串:str
一个有序的集合,用于存储和表示基本的文本信息,一对单双或三引号中间包含的内容为字符串。
特性:有序,不可变(一旦声明不可变)
str.swapcase() #将字符串由小写全部转换为大写,由大写全部变成小写。
str.captalize() \ title() # 首字母大写。
str.upper() #全部变成大写
str.casefold() \lower() #全部变成小写
str. center(n) # 以什么为中心。加多少个,什么字符进去。
例:
str1 = "[runo测试ob]" print( str1.center(40, '*')) #以str1这个字符串为中,左右俩边添加字符进去,也可不添加字符进去 结果:***************[runo测试ob]***************
str.count(n) # 计算出现的次数。
startswith() #检测字符串是否以指定的前缀开始。
endswith(n) #检测字符串是否以指定的结尾结束。
expandtabs(n) # 扩展tabs键,将tabs的长度变长,默认的tabs键长度为8.
find() #查找一个值,并且返回其索引位置,找不到就返回一个负数。
format() 传递,格式化的另外一种方法。
index(n) #返回字符串的索引值,可以 start,end.
isdiggit() #判断是不是一个整数。
join() #将列表变成字符串之后,以什么来区分每一个列表里的元素。
strip() #脱掉
split(n)#将字符串分成一个列表。
replace() # 替换
列表:
列表 是一个数据的集合,集合内可以放任何数据类型,可对集合进行方便的增删改查操作
创建 [ ]
查询 .index(), 切片 [_ : _]
n2=["shanshan","tongjie","xiaoyu",1,3,4,4,5,6,7,7,8,8,8,8,0,0,2,3,4,4]
n2[3] #取前面几个值,注意这里是中括号[].
1
>>> n2[-4]#通过索引从列表右边开始取值
2
>>> n2[-2]
4
#取后面几个数的值,可以这样取,那么中间的数就不好去具体数。针对一个列表有很多元素,中间的就不可能进行直接数。那么就引入了 .index()可以直接根据具体的值来进行索引。找到在列表中的哪一个位置然后再进行调用.
n2.index(8) #先根据值用index()找位置
11
n2[11] #再根据得到的具体位置进行调用,那么中间的数就可以不用去数。
8
#列表里有一个值为8,而用index进行找,就会自动将列表中的第一次出现8的这个值得索引位置给表示出来。就得出8这个值得位置在第11这个地方。
>>> n2.index(4)#4这个值得位置在第5.
5
>>> n2[5] #调用5这个位置的值为4
4
>>> n2[n2.index(4)] # 可以简化成这样的格式,就可以直接调用4这个值。
4 这里需要注意的是如果直接用n2[4]得出的值会是3。
举例说明: n2[n2.index("shanshan")]
'shanshan'
>>> n2[n2.index("xiaoyu")]
'xiaoyu'
>>n2.count(8) # 统计指定元素的个数.count()
4
n2.count("shanshan")#如果是字符串的话必须加引号
1
切片 [ : ]
n2 = ["shanshan","tongjie","xiaoyu",1,3,4,4,5,6,7,7,8,8,8,8,0,0,2,3,4,4]
n2[0:3] #索引0至3的元素,不包括3,顾头不顾尾。
['shanshan', 'tongjie', 'xiaoyu']
n2[ :-1] #索引0至最后一个的值,不包括最后一个值。
['shanshan', 'tongjie', 'xiaoyu', 1, 3, 4, 4, 5, 6, 7, 7, 8, 8, 8, 8, 0, 0, 2, 3, 4]
n2[:] #索引0到最后一个的值相当与复制一个相同的列表
['shanshan', 'tongjie', 'xiaoyu', 1, 3, 4, 4, 5, 6, 7, 7, 8, 8, 8, 8, 0, 0, 2, 3, 4, 4]
n2[3:6]#索引3至6的元素,或者 n2[1:7]
[1, 3, 4] ['tongjie', 'xiaoyu', 1, 3, 4, 4]
例:
n3 = ['shanshan','alibab','xiaouu','xiaojiay','tgy','xyz',7]
n3[ :6:1] #取从0至6的值,但不包括6.间隔为1取一个值。
['shanshan', 'alibab', 'xiaouu', 'xiaojiay', 'tgy', 'xyz']
n3[ 1:6:1] #取从1至6的值,但不包括6.步长为1,间隔为1取一个值。
['alibab', 'xiaouu', 'xiaojiay', 'tgy', 'xyz']
n3[ 1:6:2]#取从1至6的值,但不包括6.步长为2,间隔为2取一个值。,
['alibab', 'xiaojiay', 'xyz']
n3[ 1:6:3] #取从1至6的值,但不包括6.步长为3,间隔为3取一个值
['alibab', 'tgy']
n3[: : 1]#取从头至尾的值.步长为1,间隔为1取一个值即不跳相当于复制一个相同列表
['shanshan', 'alibab', 'xiaouu', 'xiaojiay', 'tgy', 'xyz', 7]
n3[: : 2] #取从头至尾的值.步长为2,间隔为2取一个值。
['shanshan', 'xiaouu', 'tgy', 7]
n3[: : 3] #取从头至尾的值.步长为3,间隔为3取一个值。
['shanshan', 'xiaojiay', 7]
添加/追加 .apped(n) 列表尾部添加
L = ['shanshan', 'xiaoyu', 'zhangsan', 'lisi', 'wangmazi', 3, 7, 4, 5, 9, 11, 17]
>>> L.append("haha")
>>> L
['shanshan', 'xiaoyu', 'zhangsan', 'lisi', 'wangmazi', 3, 7, 4, 5, 9, 11, 17, 'haha']
插入 任意位置 .insert(position,"value")选择插入的位置,值
L.insert(3,"夏雨荷")
>>> L
['shanshan', 'xiaoyu', 'zhangsan', '夏雨荷', 'lisi', 'wangmazi', 3, 7, 4, 5, 9, 11, 17, 'haha']
修改 L[position] = "value" 直接把被改的元素位置赋值给要替换的新元素
L = ['shanshan', 'xiaoyu', 'zhangsan', '夏雨荷', 'lisi', 'wangmazi', 3, 7, 4, 5, 9, 11, 17, 'haha']
>>> L[3] = "dave"
>>> L
['shanshan', 'xiaoyu', 'zhangsan', 'dave', 'lisi', 'wangmazi', 3, 7, 4, 5, 9, 11, 17, 'haha']
删除 最后一个元素 .pop()
L.pop()
'haha'
>>> L
['shanshan', 'xiaoyu', 'zhangsan', 'dave', 'lisi', 'wangmazi', 3, 7, 4, 5, 9, 11, 17]
删除其中一个元素 .remove(n)
L = ['shanshan', 'xiaoyu', 'zhangsan', 'dave', 'lisi', 'wangmazi', 3, 7, 4, 5, 9, 11, 17]
>>> L.remove("dave")
>>> L
['shanshan', 'xiaoyu', 'zhangsan', 'lisi', 'wangmazi', 3, 7, 4, 5, 9, 11, 17]
删除 全部或者单独元素 del / del 变量名[n]
del L[3]
>>> L
['shanshan', 'xiaoyu', 'zhangsan', 'wangmazi', 3, 7, 4, 5, 9, 11, 17]
>>>
del L
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
L
NameError: name 'L' is not defined #这就表示全部删除了
L = ['shanshan', 'xiaoyu', 'zhangsan', 'wangmazi', 3, 7, 4, 5, 9, 11, 17]
>>> del L[2:4]
>>> L
['shanshan', 'xiaoyu', 3, 7, 4, 5, 9, 11, 17] 利用切片删除
循环 for 变量名 in 变量名 :
把列表里的每一个值取出来赋给 i ,i是一个临时变量。交给print执行下面的语句,依次循环列表里的值。
L2 = ["a","b","c","L","e",1,2]
for you in L2: #这后面一定要有冒号
print(you)
a
b
c
L
e
1
2
举例
range(10)
range(0, 10)
>>> for i in range(10):
print(i)
0
1
2
3
4
5
6
7
8
9
>>> for k in range(10):
print(k)
0
1
2
3
4
5
6
7
8
9
排序 .sort () 按照askll码值得大小进行排序
n = ["!","*","#","a","b","c","e","y","z"]
n.sort()
>>> n
['!', '#', '*', 'a', 'b', 'c', 'e', 'y', 'z']
.reverse() 原地翻转 倒过来
n.reverse()
>>> n
['z', 'y', 'e', 'c', 'b', 'a', '*', '#', '!']
>>>
拼接 直接 + / n1.extend(n2)
n1 = ["!","*","#","a","b","c","e","y","z"]
n2 = [1,2,4]
n1+n2
['!', '*', '#', 'a', 'b', 'c', 'e', 'y', 'z', 1, 2, 4]
n1.extend(n2)
n1.extend(n2)
>>> n1
['!', '*', '#', 'a', 'b', 'c', 'e', 'y', 'z', 1, 2, 4]
清除 n.clear() 清除了整个列表与del的作用一样但语法不一样
n1 = ["!","*","#","a","b","c","e","y","z"]
>>> n1.clear()
>>> n1
[]
拷贝 n.copy() 这里注意区分 在变量里
n = [3,4,5] a = 7
n4 = n b = a 当b = a时,b的值是指向a的值,并不会因为a的值变化而变化
n a
[3, 4, 5] 7
n4 b
[3, 4, 5] 7
n[2] = "jack" a = 19
n a
[3, 4, 'Jack'] 19
n4 b
[3, 4, 'Jack'] 7
而这里的copy,是复制的意思
所以会根据n的值变化而变化
例题讲解引入 枚举 enumerate
循环names列表,打印每个元素的索引值的元素
names = ["xiaoli","xiaohua","xiaohuang","xiaohei","mali"]
for j in enumerate(names):#注意格式后面加冒号
print(j)
(0, 'xiaoli')
(1, 'xiaohua')
(2, 'xiaohuang')
(3, 'xiaohei')
(4, 'mali') #看输出的结果就把每一个元素和索引值都打印出来了
前面输出的结果里有括号,如何去除括号呢,
names = ["xiaoli","xiaohua","xiaohuang","xiaohei","mali"]
for index, j in enumerate(names):
print(index,j)
0 xiaoli
1 xiaohua
2 xiaohuang
3 xiaohei
4 mali #这样就把括号去除了,是因为前面的 j,只是代表一个变量只能用括号括起来,
而俩个值的话,用逗号即可,也把括号去除掉了
names = ["xiaoli","xiaohua","xiaohuang","xiaohei","mali"]
for a ,j in enumerate(names):
print(a,j)
0 xiaoli
1 xiaohua
2 xiaohuang
3 xiaohei
4 mali #我试了下j前面的变量名其实可以用其他的来代替,不一定非得用index,用index的主要目的是让人明白元素的位置在具体的地方,让人一目了然,因为之前就学了index的作用就是找一个元素的索引值
# 循环names列表,打印每个元素的索引值的元素,当索引值为偶数时,把对应的元素改为-1
names = ["xiaoli","xiaohua","xiaohuang","xiaohei","mali"]
for index,j in enumerate(names): #枚举
if index %2 == 0: #偶数
names[index] = -1#接上一句如果Index的索引值是偶数,就将偶数的值全部重新赋值为-1
print(index,j)
print(names)
0 xiaoli
2 xiaohuang
4 mali
[-1, 'xiaohua', -1, 'xiaohei', -1]
index()返回字符串的索引值,可以start,end
字典:
数据类型-字典
字典一种key -value的数据类型
特性:
key -value结构
key必须可hash且必须为不可变的数据类型,必须唯一(即命名的key名不能重复)
可存放任意多个值,可修改,可以不唯一(value可是任意多个值,且可修改,值可以任意定)
无序
查找速度快
语法:
info = {"n1":["a1","b1","c1","d1","e1","f1","g1"],"n2“:["a2","b2","c2","d2","e2","f2","g2"]}
增加
info["n3"]=["a3","b3","c3","d3","e3","f3","g3"] #后面可以增加很多个或者一个值
>>> info
{'n1': ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1'], 'n2': ['a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2'], 'n3': ['a3', 'b3', 'c3', 'd3', 'e3', 'f3', 'g3']}
>>>
info["n2"][1]+="今天大年初一"#增加某一个值的单项用+=
>>> info["n2"][1]+="今天大年初一"
{'n1': ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1'], 'n2': ['a2', 'b2今天大年初一', 'c2', 'd2', 'e2', 'f2', 'g2'], 'n3': ['a3', 'b3', 'c3', 'd3', 'e3', 'f3', 'g3']}
>>>
修改
info["n3"]= "今天要学习"#直接赋值key的n3,value的值就变成“今天要学习”,但却把原先赋值的覆盖了
>>> info
{'n1': ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1'], 'n2': ['a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2'], 'n3': '今天要学习'}
>>>
查找 in
"n3" in info #判断在不在里边
True
获取 get 如果获取没有的值,print一下就会返回一个none而不是报错。
info.get("n2")
['a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2']
>>>
info.get("n7")
>>> print(info.get("n7"))
None#这里没有n7,如果打印出来就会直接返回none
>>>
当然也可以这样,只是要报错,一般不采用
info["n7"]
Traceback (most recent call last):
File "<pyshell#188>", line 1, in <module>
info["n7"]
KeyError: 'n7'
用info. 加上Tab键就可以自动补全,看所有关于字典的关键字,包括删除之类
删除 pop(n)删除一个值同时返回对应的值
info.pop("n3")
['a3', 'b3', 'c3', 'd3', 'e3', 'f3', 'g3', '今天要学习', 'hahah ']
popitem()随机删
del info["n2"]#删除其中一个
>>> info
{'n1': ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1'], 'n3': ['a3', 'b3', 'c3', 'd3', 'e3', 'f3', 'g3', '今天要学习', 'hahah ']}
>>> del info#删除全部,注意语法
>>> info
Traceback (most recent call last):
File "<pyshell#250>", line 1, in <module>
info
NameError: name 'info' is not defined
>>>
info.clear()#清除
info.copy()#复制
info.values()#获取打印字典的所有values
info.keys()#获取打印字典所有的key
info.items()#把字典转成一个列表
info={'n1': ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1'], 'n2': ['a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2'], 'n3': ['a3', 'b3', 'c3', 'd3', 'e3', 'f3', 'g3']}
>>> info.items()
dict_items([('n1', ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1']), ('n2', ['a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2']), ('n3', ['a3', 'b3', 'c3', 'd3', 'e3', 'f3', 'g3'])])
>>>
info.update(n)合并字典,根据key不能命名一样的原则,合并俩个字典时,相同的key值会被覆盖,
info = {"n1":["a1","b1","c1","d1","e1","f1","g1"],"n2:["a2","b2","c2","d2","e2","f2","g2"]}
names = {"xiaoli":[22,"gilr"],"n2":["a2","b2","c2","d2","e2","f2"]}
info.update(names)
>>> info
{'n1': ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1'], 'n2': ['a2', 'b2', 'c2', 'd2', 'e2', 'f2'], 'xiaoli': [22, 'gilr']}
>>>
>>> info.setdefault(n,n)疑问这样起什么作用
info.setdefault("test","new2")
'new2'
{'n1': ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1'], 'n2': ['a2', 'b2', 'c2', 'd2', 'e2', 'f2'], 'xiaoli': [22, 'gilr'], 'test': 'new2'}
>>> info.setdefault("test","new2")
'new2'
>>> info
{'n1': ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1'], 'n2': ['a2', 'b2', 'c2', 'd2', 'e2', 'f2'], 'xiaoli': [22, 'gilr'], 'test': 'new2'}
>>>
info.fromkeys(n,n)#生成一个新的字典
info.fromkeys()#生成一个新的字典key分别为A,B,C,而Value值同为Alex的新字典
info.fromkeys(["A","B","C"],"alex")
{'A': 'alex', 'B': 'alex', 'C': 'alex'}疑问这样起什么作用
多级字典嵌套
字典循环 for in :
info = {"n1":["a1","b1","c1","d1","e1","f1","g1"],"n2":["a2","b2","c2","d2","e2","f2","g2"]}
>>> for k in info:
print(k)#只打印key
n1
n2
for i in info:#这里必须重新for一次
print(k,info[k])#打印key与value的值
n1 ['a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2']
n2 ['a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2']
集合
集合是一个无序,不重复的数据组合。
作用:
去重,把一个列表变成集合,就自动去重
关系测试,测试俩组数据之间的交集,差集,并集的关系
特征:
1.确定性(元素必须可hash)
2.互异性(去重)
3.无序性(集合中的元素没有先后之分),如集合{3,4,5}和{3,5,4}算作同一个集合
语法:s = { }#注意是花括号
自动去重功能
s = {1,2,3,5,1,2,4,5,3,7,9,7}
>>> s
{1, 2, 3, 4, 5, 7, 9}
set(n) 或者 n=set(n) #把一个列表,元组转成一个集合,字典不能被转化哦
L =[1,2,3,4,5,2,3]
>>> set(L)#直接定义大括号
{1, 2, 3, 4, 5}
s= (1,2,3,4,5,6,2,4,)
>>> s = set(s)#把s的值传递进去给set,然后直接赋值转化
>>> s
{1, 2, 3, 4, 5, 6}
>>>
.add(n)增加一个值,但不能增加相同的值在集合里去,因为集合有自动去重功能
.pop()删除,随机删除一个值,集合是无序的
.remove(n),删除,指定删除某一个值,如果删除一个没有的值会报错
.discard(n)丢弃,指定删除某一个值,但与remove有区别,如果删除一个没有的值不会报错。
.update()增加,多个值
集合关系测试
intersection 或者 & 交集 指俩个集合都有的共同点和交叉点
difference 或者 - 差集 指俩个集合无共同点的俩边
union 或者 |(管道符)并集 把俩个集合变成一个大集合,并且把重复的去掉
isdisjoint(n) 不相交 判断俩个集合是不是不相交
s = {1, 2, 3, 4, 5, 6}
>>> s1 = {1, 2, 3, 4, }
>>> s.isdisjoint(s1)#判断s 与s1不相交
False#答案为假。是因为s与s1相交
s = {1, 2, 3, 4, 5, 6}
>>> s1={7,8,9,10}
s.isdisjoint(s1)#判断s 与s1不相交
True#答案为真,是因为s与s1确实不相交
>>>
.symmetric_difference(n) 对称差集 指将俩个集合不相交的俩边放在一起
s = {1, 2, 3, 4, 5, 6}
>>> s1 = {1,2,7,8,9,13}
>>> s.symmetric_difference(s1)
{3, 4, 5, 6, 7, 8, 9, 13}#s与s1中不相交的值,放在一起组成一个新的集合
包含关系
.issuperset(n) 判断俩个集合是不是有包含关系,等同于a>=b
.issubset(n) 判断俩个集合是不是有被包含关系,等同于a<=b
s = {3,4,5,6,7}
s1 ={3, 4, 5, 6, 7, 8, 9, 13}
s1.issuperset(s)或者 s1 >= s
True #s1的值全部包含s的值,可理解为s1>=s
反之
s.issuperset(s1)
False #则报错,这就是包含关系
s.issubset(s1)或者s <= s1
True #s 的值被s1全部包含,可理解为s<=s1
>>> s1.issubset(s)
False
其实包含关系,可以理解为,假如A为大,B为小,A>B,A就把B包含进去了,用issuperset,
而B<A,B就必须被包含,顺从于A,用issubset.