列表
del 删除
列表连接
1 a = [1, 2, 3] 2 b = [4, 5, 6] 3 c = [7, 8, 9] 4 d = a +b + c 5 print(d)
判断元素是否在list中
1 z = [1, 2, 3] 2 x = 8 3 print(x in z) # True表示在list中,False表示不在list中
遍历列表
for循环遍历
while循环遍历
1 # for循环遍历列表 2 f = [1, 2, 3, 'r'] 3 4 for i in f: 5 print(i)
1 # while循环遍历列表, 一般不用while 2 r = ['q', 'w', 'e'] 3 length = len(r) 4 indx = 0 5 while indx < length: 6 print(r[indx]) 7 indx += 1
列表操作
1 #for 创建 2 a = ['a', 'b', 'c'] 3 b = [i for i in a ] 4 print(b) 5 6 #对a中所有元素乘以十生成一个新的list 7 a = [1, 2, 3, 4, 5] 8 b = [i*10 for i in a ] 9 print(b) 10 11 # 过滤元原来列表并生成新列表 12 a = [x for x in range(1,11)] 13 b = [m for m in a if m %2 ==0] 14 print(b) 15 16 # 列表生成式可以嵌套 17 a = [i for i in range(1,4)] 18 b = [i for i in range(100,400) if i % 100 == 0] 19 c = [m+n for m in a for n in b] 20 print(c)
列表常用函数
1 a = [x for x in range(1, 100)] 2 print(len(a)) # 求列表长度 3 print(max(a)) # 求列表最大值 4 b = "I Love Python" 5 print(list(b)) # 把其他格式数据转换为列表 但被转换目标必须是可迭代的 6 c = [i for i in range(1, 4)] 7 c.append(10) # 末尾添加元素 8 print(c) 9 c.insert(1, 66) # 在下标为1的前面插入 10 print(c) 11 l = [1, 2, 3, 4] 12 del l[2] # 删除下标为2的元素 13 print(l) 14 xxxx = l.pop() # 把最后一个元素拿出来赋值给xxxx 15 print(l) 16 print(xxxx) 17 d = [8, 9, 6, 4, 7] 18 d.remove(8) # 删除元素'8',使用remove()时需要确定元素在列表内,否则报错 19 print(d) 20 d.clear() # 清空列表,但是列表依然存在,地址不变 21 print(d) 22 a = [1, 2, 3, 4, 5] 23 a.reverse() # 原地反转列表 24 print(a) 25 b = [6, 7, 8, 9, 10] 26 a.extend(b) # 原地拼接列表 27 print(a) 28 g = [1,5,6,7,8,9,5,4,56489,6112,84,6,12,6,2,3,5,8] 29 g_l = g.count(6) #查找列表中指定元素的个数 30 print(g_l)
copy:深拷贝,浅拷贝
浅拷贝,拷贝指向的地址
1 a = [1,2,3,4,5,6,7,8,9] 2 print(a) 3 b = a 4 b[5] = 789 5 print(a) 6 print("a的id:"+str(id(a))) 7 print(b) # 与a的值相同 8 print("b的id:"+str(id(b))) # 与a的地址相同
深拷贝 另外开辟内存空间拷贝内容
1 a = [1,2,3,4,5,6,7,8,9] 2 b = a.copy() 3 b[5] = 987 4 print(a) 5 print("a的id:"+str(id(a))) 6 print(b) # 与a的值不同 7 print("b的id:"+str(id(b))) # 与a的地址不用
元组-tuple
元组可以看成是一个不可更改的list
创建元组
1 # 创建空元组 2 t = () 3 print(type(t)) 4 # 创建有一个值的元组 5 t = (1,) 6 print(type(t)) 7 print(t) 8 t = 1, 9 print(type(t)) 10 print(t) 11 # 创建多个值的元组 12 t = (1, 2, 3, 4, 5) 13 print(type(t)) 14 print(t) 15 # 使用其他结构创建 16 l = [1, 2, 3, 4] 17 t = tuple(l) 18 print(type(t)) 19 print(t)
元组的特性
有序
元组数据可以访问,不能修改
数据可以是任意类型
除了不可修改,具有list的其他特性
1 t1 = (1, 2, 3) 2 t2 = (4, 5, 6) 3 print("t1的id:"+str(id(t1))) 4 print("t2的id:"+str(id(t2))) 5 t1 = t1 + t2 # tuple不可改变,这里默认是重新开辟空间建立t1,实际是传址操作 6 print("t1的id:"+str(id(t1))) 7 print(t1) 8 # 双层元组的遍历 9 t = ((1, 2, 3), (3, 4, 5), ("ss", 'qwe', '9745')) 10 for i in t: 11 print(i) 12 for k,m,n in t: 13 print(k, m, n)
汉诺塔问题
每次移动一个盘子
任何时候大盘子在下面,小盘子在上面
n=1 # 直接把A上的盘子移动到C上 A->C
n=2 # 把小盘子从A放到B上, A->B
再把大盘子从A移动到C, A->C
然后小盘子从B到C B->C
n=n # 把A上的n-1个盘子借助C移动到B
把B上的第n个盘子移动到C
把B上的n-1个盘子借助于A移动到C
1 def hano(n, a, b, c): 2 if n == 1: 3 print(a, "->", c) 4 return None 5 if n ==2: 6 print(a, "->", b) 7 print(a, "->", c) 8 print(b, "->", c) 9 return None 10 hano(n-1, a, c, b) # A 借助C把盘子给了B 11 print("------------") 12 print(a, "->", c) 13 print("*******") 14 hano(n-1, b, a, c) # B 借助A把盘子给了C 15 print("-*-*-*-*-*-*") 16 17 a, b, c = 'A', 'B', 'C' 18 n = 3 19 hano(n, a, b, c)