列表推导式
# 列表推导式 : 就是简化for循环和列表结合操作的一种语法
# [表达式 for 临时变量 in 迭代对象 if 判断]
# ls = []
# for x in range(10):
# ls.append(x)
# print(ls)
from random import randint
import string
print([i for i in range(10)])
print([i**2 for i in range(10)])
scores = [randint(10, 100) for _ in range(10)]
print(scores)
# 选出成绩及格的
print([s for s in scores if s >= 60])
# 全是偶数
print([s for s in scores if s%2==0])
# 生成十位同学
print([f'学生{i}' for i in range(1, 11)])
print(string.ascii_uppercase)
print(string.ascii_lowercase)
print(string.ascii_letters)
print([f'学生{x}' for x in string.ascii_uppercase[:7]])
二维列表
# 二维数组和zip函数
# 5 x 6 的全零数组
m1 = [[0]*6 for _ in range(5)]
for row in m1:
print(row)
# 访问 名[行索引][列索引]
m1[4][5] = 999
print("---"*10)
for row in m1:
print(row)
# 编写函数实现连个矩阵相乘
def matrix_dot(matrix1, matrix2):
assert len(matrix1[0]) == len(matrix2), "matrix1列 = matrix2行"
# 确定相乘矩阵的形状
m, n = len(matrix1), len(matrix2[0])
res_matrix = [[0]*n for _ in range(m)]
for i in range(m):
for j in range(n):
for k in range(len(matrix1[0])):
res_matrix[i][j] += matrix1[i][k] * matrix2[k][j]
return res_matrix
m2 = [[i]*2 for i in range(1, 4)]
m3 = [[i]*2 for i in range(1, 4)]
print("---"*10)
for row in m2:
print(row)
m4= [[1, 2, 3, 4] for i in range(1, 3)]
print("---"*10)
for row in m4:
print(row)
# matrix_dot(m2, m3)
res = matrix_dot(m2, m4)
print("---"*10)
for row in res:
print(row)
zip和元组
# zip 同时迭代两个列表
from matplotlib import pyplot as plt
from math import sqrt
pos_X = [0, 1, 5, 8]
pos_Y = [0, 5, 10, 13]
target = [6, 8]
plt.scatter(pos_X, pos_Y)
plt.scatter(target[0], target[1])
plt.show()
# 计算每个点和target之间的距离
dis = []
for x, y in zip(pos_X, pos_Y):
d = sqrt((x-target[0])**2 + (y-target[1])**2)
dis.append(d)
print(dis)
#
ss = []
for i in range(len(pos_X)):
s = sqrt((pos_X[i] - target[0]) ** 2 + (pos_Y[i] - target[1]) ** 2)
ss.append(s)
print(ss)