定义:库是一个更大的集合,通常包含多个包,用于实现特定功能(例如数据处理,机器学习等)。
举例:
先安装 scikit-learn库
# bash终端
conda activate sc
# 安装 scikit-learn库
pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple scikit-learn
Scikit-learn案例:
# scikit-learn 使用案例:
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
# 生成样本数据
X, y= make_blobs(n_samples=100, centers=3, random_state=42)
# 使用 KMeans 聚类
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
print("Cluster Centers:", kmeans.cluster_centers_)

模块的导入有三种方式:
import math # 导入整个模块
import math as n # 使用别名导入
from math import sqrt # 从模块中导入特定函数
# 导入包/库的方式
import numpy
import numpy as np
from numpy import sum
列表:可以包含多种数据类型的数据结构,是数据的容器
[] 创建列表,每个元素之间使用 , 分隔# 创建一个包含整数的列表
numbers = [1,2,3,4,5]
# 创建一个包含字符串的列表
names = ["xiaobai","xiaoxin","nini","fengjian","zhengnan","adai","xiaokui"]
# 创建一个混合数据类型的列表
mixed = [1,"hello",3.14,True]
# 创建一个空列表
empty_list = []
print(numbers)
print(names)
print(mixed)
print(empty_list)

fruits = ["apple", "banana", "cherry", "banana"]
# 访问单个元素
print(fruits[0])
print(fruits[-1])
print(fruits[-2])
print(fruits[-1])

提取多个元素使用切片,即 : 。在指定范围内,包含起始值,不包含结束值。
start:stop的形式:取从start索引到stop-1索引的元素start默认从头开始,stop默认到结尾结束start:stop:step

如果y=x,对 y 进行了修改,这个修改居然会同步给x!
在 python 中,变量赋值是通过引用进行的,而不是创建独立的副本。这种机制对于可变对象(如列表,字典,数据框等)非常重要,因为修改其中一个引用会影响其他引用。

解决办法是浅拷贝:y = x.copy()
看完后呢,就跟着操作:
x = ['a', 'b', 'c']
print(x)
y = x.copy
y[1] = '?'
print(y)
然后运行就报错:
TypeError Traceback (most recent call last)
Cell In[32], line 5
2 print(x)
4 y = x.copy
----> 5 y[1] = '?'
6 print(y)
TypeError: 'builtin_function_or_method' object does not support item assignment
问人工智能大模型kimi,你的学习好伙伴:
这个错误是因为你没有正确地调用 copy 方法来创建列表 x 的副本。在 Python 中,copy 是一个方法,需要使用括号 () 来调用它。如果不使用括号,y 变量将被赋值为 copy 方法本身,而不是 x 的副本。因此,当你尝试修改 y 时,会出现 'builtin_function_or_method' object does not support item assignment 的错误。
x = ['a', 'b', 'c']
print(x)
y = x.copy # 错误:没有调用 copy 方法
y[1] = '?'
print(y)
x = ['a', 'b', 'c']
print(x)
y = x.copy() # 正确:调用 copy 方法
y[1] = '?'
print(y)
y = x.copy 这行代码将 copy 方法本身赋值给了 y,而不是 x 的副本。因此,y 是一个方法对象,而不是一个列表,所以不能对其进行索引和赋值操作。y = x.copy() 这行代码正确地调用了 copy 方法,创建了 x 的一个副本,并将其赋值给 y。因此,y 是一个列表,可以对其进行索引和赋值操作。运行正确代码后的输出将是:
['a', 'b', 'c']
['a', '?', 'c']
嗯,可能这就是我上课给别人讲的,眼睛会了,脑子会了,但是手还没学会,一敲命令就出错!!!
少了一个括号,再来:
x = ['a', 'b', 'c']
print(x)
y = x.copy()
y[1] = '?'
print(y)

这回好了吧!
append 方法将元素添加到列表末尾insert 方法在指定位置插入元素remove 按值删除,del 按索引删除# 追加元素
numbers = [1,2,3]
numbers.append(4)
print(numbers)
# 插入元素
numbers.insert(1,10)
print(numbers)
# 删除指定值的元素
numbers.remove(10)
print(numbers)
# 按索引删除
del numbers[0]
print(numbers)

len()获取列表长度# 列表相加
a = [1, 2, 3]
b = [4, 5, 6]
print(a + b)
# 列表重复
print(a * 2)
# 列表长度
print(len(a))

python不能给列表的元素命名,字典相关于是有元素名字的列表
每个元素是一个键值对,元素之间用逗号 , 隔开
键要求独一无二,不能有重复
创建:用一对大括号 { } 创建,并以 键值对的形式存储,键和值用冒号 : 分隔,多个键值对之间用逗号 , 分隔
# 最基本的方式
# 一个来自北京的25岁的Tom
dict1 = {"name":"Tom", "age":25, "city":"Beijing"}
# dict()函数
dict2 = dict(name='Tom', age=25, city='Beijing')
# dict + zip
# 把键和值分开创建之后zip到一起
keys = ['name', 'age', 'city']
values = ['Tom', 25, 'Beijing']
dict3 = dict(zip(keys, values))
print(dict1)
print(dict2)
print(dict3)

get():提取给定的键对应的值,如果键不存在返回一个默认值(None)# 用键提取
print(dict1['name'])
# 用get()方法
print(dict1.get('name'))
print(dict1.get('Name'))
print(dict1.get('Name','unknown'))

如果需要提取多个元素,可以这样写:
values = [dict1['name'], dict1['age']]
print(values)

但是上面这样操作存在一些问题:
sorted(), map()灵活配合,显得冗长解决办法:引入 itemgetter
itermgetter是python的标准库operator模块中的一个工具,专门用于高效提取一个或多个键对应的值。
from operator import itemgetter
# 创建提取器
getter = itemgetter('name','age')
person1 = {'name':'xiaoxin', 'age':5, 'city':'chunribu'}
person2 = {'name':'xiaokui', 'age':2, 'city':'chunribu'}
print(getter(person1))
print(getter(person2))

.keys()方法提取键,.values()方法提取值,.items()方法提取所有键值对元素,并一一封装在元组中
(元组tuple)是带上枷锁的列表,也允许不同的数据类型,区别在于用小括号而非中括号,且不能单独修改元组中的某个值

元组是python中的一种不可变数据结构,与列表类似,但有以下区别:
()定义,如:tuple1 = (1,2,3)
tuple1



根据以下变量,请判断它们的数据类型:
a = 42
b = 3.14
c = "hello world"
d = [1, 2, 3]
e = {"name": "Alice", "age": 30}

str 类型的常用方法并试验 upper() 方法。
list 的常用方法,尝试使用 append() 添加一个新元素到列表。
在当前目录下创建一个名为 my_math.py 的模块,编写以下代码:
def add(a, b):
return a + b
编写一个主程序文件,导入 my_math 模块,并调用 add 函数。

使用 math 模块计算以下数学公式的结果:

创建一个包含以下元素的列表,并完成操作:
[10, 20, 30, 40, 50]

append 方法向列表中添加 60。remove 删除 30。
创建一个描述你最喜欢电影的字典,包含以下键:
title: 标题year: 上映年份genre: 类型
你看出来是什么电影了吗?嘿嘿。
title 和 year,并打印它们。
.keys() 和 .values() 方法分别打印字典的所有键和所有值。
students = [
{"name": "Alice", "score": 85},
{"name": "Bob", "score": 90},
{"name": "Charlie", "score": 75}
]


itemgetter使用 itemgetter 提取每位学生的 name 和 score。



timeit 模块比较元组和列表的创建速度:
元组速度更快呀!