碎片知识总结
num = 10
print(id(num),id(10))
numlist = ['abc',10,True]
print(id(numlist))
print(id(numlist[0]),id('abc'))
print(id(numlist[2]),id(True))
"""
is:判断两个变量的地址是否相同
==:判断两个变量的值是否相同
# a.不可变的数据类型:int/float/bool/str/tuple
n1 = 10
n2 = 10
# 比较值
print(n1 == n2) # True
# 比较地址
print(n1 is n2) # True
print(id(n1) == id(n2)) # True
# b.可变的数据类型:list/dict/set
list1 = [10,20,30]
list2 = [10,20,30]
# 比较值
print(list1 == list2) # True
# 比较地址
print(list1 is list2) # False
print(id(list1) == id(list2)) # False
"""
结论:
两个变量的地址相同,则这两个变量的值一定相同
两个变量的值相同,则这两个变量的地址不一定相同
"""
- 6、要查看某一个系统功能时,按住ctrl,用鼠标单击该系统功能关键字
列表的遍历
- 遍历:依次获取迭代器【列表,字符串,元组,字典,集合。。。。】中的每个元素
list1 = [34,5,6,67]
i = 0
while i < len(list1):
print(list1[i])
i += 1
for n in list1:
print(n)
for i in range(len(list1)):
print(i,list1[i])
- 枚举(enumerate /??nju?m?re?t/ vt. 列举;枚举;)
for index,ele in enumerate(list1):
print(index,ele)
列表的系统功能
- 列表“增”的3种方法:append(v. <正式>附加,增补)、extend(v. 延伸;扩大,延长;)、insert(v. 插入,嵌入)
"""
注意
a.列表.append()可以添加任意类型的元素
列表.extend()只能添加可迭代对象的元素,可迭代对象:本质是一个容器,可以通过for循环遍历其中的元素,如:列表,字符串,元组,字典,集合.....
b.列表.append():如果添加的是容器,则整个容器会被添加到原列表中
列表.extend():只会将指定容器中的元素添加到原列表中
"""
list1 = [11,22,33]
print(list1)
list1.append('aaa')
print(list1)
list1.append([55,66])
print(list1)
list2 = [11,22,33]
print(list2)
list2.extend('abc')
print(list2)
list2.extend([55,66])
print(list2)
list2.extend((55,66))
print(list2)
list2.extend(range(3))
print(list2)
list3 = [11,22,33]
print(list3)
list3.insert(1,44)
print(list3)
list3.insert(10,[55,33,44])
print(list3)
- 列表“删”的4种方法:remove(vt. 移开,拿开;除去)、pop(popup v. 弹出)、clear、del(n. 删除文件;)
remove是通过匹配列表元素进行删除,pop是通过列表索引进行移除,clear是清空列表,del删除对象。
list1 = [23,5,34,5,5,10]
print(list1)
list1.remove(5)
print(list1)
list1.remove(100)
list2 = [23,5,34,5,5,10]
print(list2)
list2.pop()
print(list2)
list2.pop(1)
print(list2)
r1 = list2.remove(5)
print(r1)
r2 = list2.pop(1)
print(r2)
list3 = [23,5,34,5,5,10]
print(list3)
list3.clear()
print(list3)
list3 = [23,5,34,5,5,10]
print(list3)
del list3[1]
print(list3)
del list3
- 列表删除注意事项:
通过列表循环遍历进行删除(remove、pop)时,一般不使用原列表,因为列表是可变的,可以通过列表复制的方法:
list1 = [34,5,5,67,7,8,5,5,243,5,78,5]
for num in list1.copy():
if num == 5:
list1.remove(5)
print(list1)
- 列表“改”的3种方法:reverse(v. 逆转)、sort(n. 分类,排序;)、sort(severse = True)、list(x)(将容器x转列表)
list1 = [34,45,5,67,100,50]
print(list1)
list1.reverse()
print(list1)
'''
sort()方法是在原地对列表排序,是对原列表的直接操作,并不会返回一个新的列表。
sort()方法需要单独使用,如果和赋值,打印等方法一起使用,结果会返回None。
'''
list1 = [34,45,5,67,100,50]
print(list1)
list1.sort()
print(list1)
list1 = [34,45,5,67,100,50]
print(list1)
list1.sort(reverse=True)
print(list1)
print(list('abc'))
print(list(range(5)))
- 列表‘查’的3种方法:len(length n. 长度)、index(n. 索引;)、count(v. (按顺序)数数;计数)
numlist = [34,6,56,6,6,7,6,134,50,30]
print(len(numlist))
print(max(numlist))
print(min(numlist))
r1 = numlist.index(6)
print(r1)
numlist = [34,6,56,20,7,6,134,50,30]
r1 = numlist.index(6)
print(r1)
r1 = numlist.index(6,1,5)
print(r1)
r = numlist.count(6)
print(r)
列表推导式
- 列表推导式,就是指的轻量级循环创建列表
- 列表推导式/列表生成式:是Python特有的语法,通过循环和if语句专门用来创建列表
- 特点:根据一个已知的Iterable,使用一行代码实现简单的逻辑,生成一个新的列表
- 语法:[新列表中的元素规律 for循环 if语句]
- 工作原理:执行for循环,获取已知Iterable的元素,结合if判断,最终得到新的列表中元素的规律
l1 = [1,2,3,4,3,3,6]
l2 = [i-1 for i in l1 if i == 3]
print(l2)
列表拷贝
list1 = [11,22,33]
list2 = list1
print(list1 is list2)
list1[1] = 100
print(list1 is list2)
print(list1)
print(list2)
list1 = [[11,22,33],[44,55]]
list2 = list1
print(list1 is list2)
list1[0][1] = 100
print(list1 is list2)
print(list1)
print(list2)
"""
结论1:
无论是一维列表还是多维列表,如果使用引用赋值的方式操作,
只要通过一个变量修改了列表中的元素,则另一个变量访问的列表也会随着修改
"""
list1 = [11,22,33]
list2 = list1.copy()
print(list1 is list2)
list1[1] = 100
print(list1)
print(list2)
list1 = [[11,22,33],[44,55]]
list2 = list1.copy()
print(list1 is list2)
list1[0][1] = 100
print(list1 is list2)
print(list1)
print(list2)
print("*" * 80)
import copy
list1 = [11,22,33]
list2 = copy.copy(list1)
print(list1 is list2)
list1[1] = 100
print(list1 is list2)
print(list1)
print(list2)
list1 = [[11,22,33],[44,55]]
list2 = copy.copy(list1)
print(list1 is list2)
list1[0][1] = 100
print(list1 is list2)
print(list1)
print(list2)
"""
结论2:列表.copy() 和 copy.copy(列表) 和 切片
一维列表:如果一个变量修改列表中的元素,对另一个列表没有任何影响
二维列表:如果一个变量修改内层列表中的元素,则另一个列表中的元素会随着发生修改
"""
list1 = [11,22,33]
list2 = copy.deepcopy(list1)
print(list1 is list2)
list1[1] = 100
print(list1 is list2)
print(list1)
print(list2)
list1 = [[11,22,33],[44,55]]
list2 = copy.deepcopy(list1)
print(list1 is list2)
list1[0][1] = 100
print(list1 is list2)
print(list1)
print(list2)
"""
结论3:copy.deepcopy()
无论是一维列表还是多维列表,如果使用copy.deepcopy()的方式操作,
通过一个变量修改了列表中的元素,另一个变量访问的列表没有影响
"""
列表切片
- 切片:根据指定的区间,指定的步长,在列表,元组或字符串等有序集合中进行截取,形成一个新的列表,元组或字符串
- 语法:
列表名[start: end:step] start:开始索引,可以省略,默认为0,不省略的情况下包含在内 end:结束索引,可以省略,默认为索引的结束,不省略的情况下不包含在内 step:表示步长,可以省略,默认为1
"""
语法:
列表名[start:end:step]
start:开始索引,可以省略,默认为0,不省略的情况下包含在内
end:结束索引,可以省略,默认为索引的结束【len - 1 或 -len】,不省略的情况下不包含在内
step:表示步长,可以省略,默认为1
注意:
1.只要符合切片的语法,代码永远不会报错,只是结果列表是否为空
2.能获取到元素的前提下,只要step为负数,则表示逆序获取
"""
"""
0 1 2 3 4 5 6 7 8
-9 -8 -7 -6 -5 -4 -3 -2 -1
11 22 33 44 55 66 77 88 99
"""
numlist = [11,22,33,44,55,66,77,88,99]
print(numlist[1:])
print(numlist[1:8])
print(numlist[:6])
print(numlist[1:100])
print(numlist[1:9])
print(numlist[:])
print(numlist[::])
print(numlist[::1])
print(numlist[::2])
list1 = [24,56,67,8]
print(list1)
list2 = list1[:]
list3 = list1
print(list2)
list1[1] = 100
print(list1)
print(list2)
print(list3)
print("*" * 30)
"""
规律1:如果start和end同正负
a.计算start+step
b.判断上述结果是否在start和end区间内
c.如果在区间内,则按照规律获取元素,如果不在区间内,则结果直接为[]
"""
print(numlist[1:5:1])
print(numlist[1:5:-1])
print(numlist[5:1:1])
print(numlist[5:1:-1])
print(numlist[-1:-5:1])
print(numlist[-1:-5:-1])
print(numlist[-5:-1:1])
print(numlist[-5:-1:-1])
"""
规律2:start和end一个为正数,一个为负数(其中出现0,0当做正看待)
a.观察start的正负,索引的使用和start的正负保持一致
b.如果start为正,则使用正数索引;如果start为负,则使用负数索引
c.将end的索引转换为和start同符号的索引
d.继续使用规律1判断
"""
print(numlist[1:-5:1])
print(numlist[1:-5:-1])
print(numlist[-1:5:1])
print(numlist[-1:5:-1])
print(numlist[-5:1:1])
print(numlist[-5:1:-1])
print(numlist[0:-1:1])
print(numlist[0:-1:-1])
print(numlist[-1:0:1])
print(numlist[-1:0:-1])
"""
规律3:如果start和end“都”被省略
a.如果step为正数,则从左往右获取【顺序获取】
b.如果step为负数,则从右往左获取【逆序获取】
"""
print(numlist[::1])
print(numlist[::2])
print(numlist[::-1])
print(numlist[::-2])
print(numlist[1:100])
print(numlist[100:])
"""
规律4:列表[start::step]
a.如果step为正数,则从star开始,从左往右获取【顺序获取】
b.如果step为负数,则从star开始,从右往左获取【逆序获取】
"""
print(numlist[5::1])
print(numlist[5::-1])
print(numlist[-5::1])
print(numlist[-5::-1])
print(numlist[2::-1])
names = ['old_driver','rain','jack','shanshan','peiqi','black_girl']
print(names[4:8])
print(names[2:11:2])
print(names[-3:])
print(names[:2:-1])
|