基于网络课程《Python全栈开发专题》 记录笔记,请支持正版课程。
列表
# 字符串可以看做是一个序列
s = 'Life is short, you need Python.';
print(s[5])
# 序列的索引可以是负数
names = ['A', 'B', 'C']
print(names[-1], names[-2], names[-3]) # CBA
列表的分片
从一个列表中取得子列表。分片是复制出来的,没有与原列表共享对象。
slogan='Life is short, you need Python.'
print(slogan[0 : 9]) # 0 <= index < 9,左闭右开
print(slogan[15 : len(slogan)])
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[-6 : 7]) # [4, 5, 6, 7]
print(numbers[-6 : -2]) # [4, 5, 6, 7]
print(numbers[-6 : 1]) # []
print(numbers[:5])
print(numbers[5:])
print(numbers[:])
设置分片的步长:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 第三个冒号后面设置步长,默认是1
print(numbers[0 : : 2]) # [1, 3, 5, 7, 9]
# 步长可以是负数,但不能为0,负数时,是倒序
print(numbers[8 : : -2]) # [9, 7, 5, 3, 1]
序列的乘法
a = 'a'
numbers = [1, 2, 3]
print(3 * a) # aaa
print(2 * numbers) # [1, 2, 3, 1, 2, 3]
练习:打印一个三角形
result = []
i, x = 0, 5
while i < 6:
spaceList = (x - i) * [' ']
lineList = spaceList + ((2 * i + 1) * ['*']) + spaceList[:] # 程序不用加[:],只是想用一下
result.append(lineList)
i += 1
# 为了看的清楚,这样打印result
for line in result:
print(line)
'''结果是这样的:
[' ', ' ', ' ', ' ', ' ', '*', ' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', '*', '*', '*', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', '*', '*', '*', '*', '*', ' ', ' ', ' ']
[' ', ' ', '*', '*', '*', '*', '*', '*', '*', ' ', ' ']
[' ', '*', '*', '*', '*', '*', '*', '*', '*', '*', ' ']
['*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*']
'''
判断序列的子集
slogan = 'Lefe is short, you need Python.'
print('Python' in slogan); # True
values = ['Tom', 1, False];
print('tom' in values) # False
序列的长度、最大值、最小值
numbers = [1, -5, 2, 111, 7, 3, 4, 5]
print(len(numbers));
print(max(numbers))
print(min(numbers))
print(max(1, 0, 2, 4))
print(min(1, 0, 2, 4))
序列的赋值,删除元素,分片赋值
numbers = [1, -5, 2, 111, 7, 3, 4, 5]
numbers[3] = 'Apple'
print(numbers)
# 删除是用 'del' 关键字
del numbers[3]
print(numbers)
# 分片赋值
print(numbers[1 : 4])
# 其实就是用一个新的列表替换分片的那一段,元素个数可以不同
numbers[1 : 4] = ['AA', 'BB', 'CC', 'DD', 'EE']
print(numbers)
# 当然,分片赋值页可以用于删除
numbers[3 : 4] = []
print(numbers)
# 可以使用 list() 方法,将字符串转化为列表
slogan = list('Lefe is short, you need Python.')
print(slogan)
列表的方法
- append:尾部增加一个元素
- clear:清空
- copy: 赋值
- count: 某个元素出现的个数
- extend:在列表的结尾插入另一个列表
- index: 列表中某个元素第一次出现的索引位置
- insert: 在任意位置插入
- pop: 用于移除并返回一个元素,默认是最后一个(栈)
- remove: 移除列表中某个元素的第一个匹配项
- reverse: 倒序
- sort:排序
print('--- append ---')
numbers = [1, 2, 3, 4, 5]
numbers.append(20)
numbers.append('hello')
numbers.append(['a', 'b', 'c'])
print(numbers)
print('--- clear ---')
names = ['Apple', 'MI']
names.clear()
print(names)
print('--- copy ---')
a = [1, 2, 3, 4, 5]
acopy = a
acopy1 = a[:]
acopy2 = a.copy()
print(acopy == acopy1) # True
print(acopy1 == acopy2) # True
# 分片复制和copy都是深度复制,不会改变原列表
a[2] = 'A'
print(acopy)
print(acopy1)
print(acopy2)
print('--- count ---')
search = ['hehe', 'hi', 'new', 'hi', 'hehe', [1, 2]]
print(search.count('hehe')) # 2
print(search.count([1, 2])) # 1
print(search.count([1, 2, 3])) # 0
print('--- extend ---')
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a) # [1, 2, 3, 4, 5, 6]
a[2] = 'new'
print(a) # [1, 2, 'new', 4, 5, 6]
# 用"+"连接列表,会深度复制一份!!
a = [1, 2, 3]
b = [4, 5, 6]
x = a
a = a+b
print(a)
print(x)
x[2] = 543
print(a)
print('--- index ---')
numbers = [5, 4, 6, 7]
print(numbers.index(6))
# print(numbers.index(8)) # 查找不存在的值,会抛出异常!!!!
print('--- insert ---')
numbers = [1, 2, 3, 4]
numbers.insert(3, 'four')
print(numbers) # [1, 2, 3, 'four', 4]
# 用分片完成del 和 insert
numbers[3 : 4] = []
print(numbers) # [1, 2, 3, 4]
numbers[3 : 3] = ['four']
print(numbers) # [1, 2, 3, 'four', 4]
print('--- pop ---')
numbers = [1, 2, 3]
print(numbers.pop()) # 3
print(numbers) # [1, 2]
print(numbers.pop(0)) # 1 弹出指定元素
print(numbers) # [2]
print('--- remove ---')
# 有重复元素,也只移除第一个
words = ['hehe', 'hi', 'hehe']
words.remove('hehe')
# words.remove('A') # 移除一个不存在的元素,会抛出异常
print(words)
print('--- reverse ---')
numbers = [1, 2, 3, 4, 5]
numbers.reverse()
print(numbers) # [5, 4, 3, 2, 1]
print('--- sort ---')
numbers = [4, 6, 98, -1] # 混合对象会报错!!!!
numbers.sort()
print(numbers) # [-1, 4, 6, 98] 从小到大
# reverse 关键字参数
numbers.sort(reverse=True)
print(numbers) # [98, 6, 4, -1] 降序排列
print('--- sorted ---')
x = [4, 3, 7]
y = sorted(x)
print(x) # [4, 3, 7]
print(y) # [3, 4, 7]
元组
“不可更改的列表”。
- 可以在映射中作为键值使用,列表不能作为键值使用
- 很多内建函数和方法的返回值就是元组
a = ()
b = (1, 2, 3)
c = 1, 2, 3
d = 1,
print(c)
print(d)
# 乘法
print(12 * b)
print((12, ) * 3)
练习1:输入整数到列表里面,最后进行降序排列
ints = []
while True:
str = input("Integer(\'over\' to exit):")
if str == 'over':
print('Input: ', ints)
ints.sort(reverse=True)
print("Sorted: ", ints)
print('--- Bye Bye ---')
break
else:
ints.append(int(str))
练习2:打印一个二维列表,然后调转行列
# 输入一个整数i,生成一个i*i的二维列表
def buildList(i):
resultList = []
subList = []
x = 0
while x < i ** 2:
x += 1
subList.append(x);
if x % i == 0: # 封装成一个列表
resultList.append(subList.copy());
subList.clear()
return resultList
# 打印二维数组
def printList(resultList):
for subList in resultList:
print(subList)
n = int(input("输入一个正整数:"))
# n = 3
# 打印顺序排列的二维列表
resultList = buildList(n)
print('原始二维类表:')
printList(resultList)
# 互换二维列表的行和列
# newList = []
# subList = []
# i, j = 0, 0
# while i < n:
#
# while j < n:
# subList.append(resultList[j][i])
# j += 1
#
# newList.append(subList.copy())
# subList.clear()
# i += 1
# j = 0
i, j = 0, 0
while i < n:
while j < n:
# Python 中可以直接用这种方式交还两个变量,和上面是等效的
resultList[j][i], resultList[i][j] = resultList[i][j], resultList[j][i]
j += 1
i += 1
j = 0
else:
print('调换行列后的二维列表:')
printList(resultList)
效果: