1 set()函数
在 Python 中,set()
是一个内置函数,用于创建一个集合(set)。集合是一种无序且不包含重复元素的数据结构。
set()
函数的基本用法:
- 创建空集合:
注意:不能用 {} 创建空集合,{} 创建的是空字典!!!!!!!
python
运行
python
empty_set = set() # 注意:不能用 {} 创建空集合,{} 创建的是空字典
- 从可迭代对象创建集合:
python
运行
python
# 从列表创建
numbers = set([1, 2, 3, 4, 4, 5]) # 结果: {1, 2, 3, 4, 5}(自动去重)
# 从字符串创建
chars = set("hello") # 结果: {'h', 'e', 'l', 'o'}(字符去重)
# 从元组创建
tup = set(("a", "b", "a", "c")) # 结果: {'a', 'b', 'c'}
集合的主要特性:
- 无序性:集合中的元素没有固定顺序,不能通过索引访问
- 唯一性:自动去除重复元素
- 可变性:可以添加或删除元素
常用的集合操作:
python
运行
python
s = {1, 2, 3}
# 添加元素
s.add(4) # {1, 2, 3, 4}
# 删除元素
s.remove(2) # {1, 3, 4}
# 集合运算
a = {1, 2, 3}
b = {3, 4, 5}
print(a.union(b)) # 并集: {1, 2, 3, 4, 5}
print(a.intersection(b)) # 交集: {3}
print(a - b) # 差集: {1, 2}
集合常用于需要去重或进行集合运算(如交集、并集)的场景。
2 按照 "是否允许重复元素" 的标准分类数据结构
按照 "是否允许重复元素" 的标准,可以将 Python 中常见的数据结构分为以下分类:
一、允许重复元素的数据结构
-
列表(list)
有序、可变,元素可以重复:
python
运行
pythonmy_list = [1, 2, 2, 3, 3, 3] # 合法,重复元素会被保留
-
元组(tuple)
有序、不可变,元素可以重复:
python
运行
pythonmy_tuple = (1, 2, 2, 3) # 合法,重复元素会被保留
-
字典(dict)
- 键(key)不允许重复(重复会被覆盖)
- 值(value)允许重复:
python
运行
pythonmy_dict = {"a": 10, "b": 10, "c": 10} # 值重复是合法的
-
字符串(str)
有序、不可变,字符可以重复:
python
运行
pythonmy_str = "hello" # 字符 'l' 重复,合法
二、不允许重复元素的数据结构
-
集合(set)
无序、可变,元素不可重复(自动去重):
python
运行
pythonmy_set = {1, 2, 2, 3} # 实际存储为 {1, 2, 3},重复元素被自动去除
-
冻结集合(frozenset)
无序、不可变,元素不可重复(自动去重):
python
运行
pythonmy_frozenset = frozenset([1, 2, 2, 3]) # 实际存储为 frozenset({1, 2, 3})
总结
- 允许重复:列表、元组、字符串、字典(值允许重复)
- 不允许重复:集合、冻结集合、字典(键不允许重复)
3 remove() index() 方法都是 "找到第一个匹配项就停止",不会继续处理后续可能存在的相同元素
python
在python3中,下列关于列表的程序运行结果应为( )
lists = [1, 1, 1, 3, 5]
lists.remove(1)
res = lists.index(1)
print(res)
A [0, 1, 2]
B [0, 1]
C 0
D None
正确答案:C
我们来分析这道题的执行过程:
- 初始列表
lists = [1, 1, 1, 3, 5]
- 执行
lists.remove(1)
时,会移除列表中第一个值为 1 的元素,此时列表变为[1, 1, 3, 5]
- 执行
res = lists.index(1)
时,会查找列表中第一个值为 1 的元素的索引,此时第一个 1 位于索引 0 的位置 - 最后打印
res
,输出结果为 0
所以正确答案是选项 C,即输出结果为 0。
这道题主要考察了列表的两个方法:
remove()
:移除列表中某个值的第一个匹配项index()
:返回列表中某个值第一个匹配项的索引位置
小结
在 Python 列表中:
remove(x)
方法只会移除列表中第一个值为x
的元素,之后的元素不会被处理index(x)
方法只会返回列表中第一个值为x
的元素的索引位置
这配项就停止",不会继两个方法都是 "找到第一个匹续处理后续可能存在的相同元素。
例如,如果列表是[1, 2, 1, 3, 1]
:
- 执行
remove(1)
后列表变为[2, 1, 3, 1]
(只移除了第一个 1) - 执行
index(1)
会返回 1(第一个 1 所在的索引位置)
这种特性在处理包含重复元素的列表时需要特别注意,如果你需要处理所有匹配项,就需要使用循环来实现了。
4 NumPy库数值处理函数的题目
python
执行以下程序,下列选项中,其输出结果与程序的输出结果相同的一项是()
import numpy as np
arr = np.array([-1.5, 1.5])
print(np.round(arr))
A print(np.floor(arr))
B print(np.ceil(arr))
C print(np.trunc(arr))
D print(np.rint(arr))
正确答案:D
这道题主要考查 numpy 中几个数值处理函数的区别,我们一步步分析:
首先看题目中的程序:
python
运行
import numpy as np
arr = np.array([-1.5, 1.5])
print(np.round(arr)) # 四舍五入,采用"银行家舍入法"
np.round()
的计算规则是:
- 对于 - 1.5:四舍五入到最近的偶数,结果是 - 2
- 对于 1.5:四舍五入到最近的偶数,结果是 2
所以输出结果是[-2. 2.]
再看各个选项:
-
A 选项
np.floor(arr)
(向下取整):- -1.5 → -2(向负无穷方向取整)
- 1.5 → 1(向负无穷方向取整)
- 结果:
[-2. 1.]
-
B 选项
np.ceil(arr)
(向上取整):- -1.5 → -1(向正无穷方向取整)
- 1.5 → 2(向正无穷方向取整)
- 结果:
[-1. 2.]
-
C 选项
np.trunc(arr)
(截断小数部分):- -1.5 → -1(只保留整数部分)
- 1.5 → 1(只保留整数部分)
- 结果:
[-1. 1.]
-
D 选项
np.rint(arr)
(四舍五入到最近整数):- 行为与
np.round()
完全一致,采用银行家舍入法 - -1.5 → -2,1.5 → 2
- 结果:
[-2. 2.]
- 行为与
因此,只有 D 选项的输出结果与题目中程序的输出结果相同,正确答案是 D。
5 NumPy库中"数值处理" 和 "数组操作" 的函数
在 NumPy 中,除了题目中涉及的round()
、floor()
、ceil()
、trunc()
、rint()
这些数值处理函数,还有很多常用的函数,我们可以从 "数值处理" 和 "数组操作" 两个维度来补充相关知识:
一、常用数值处理函数(针对数组元素的计算)
-
四舍五入相关
np.round(arr, decimals=0)
:四舍五入到指定小数位数(默认 0 位),对x.5
采用 "银行家舍入法"(向最近偶数取整)。np.rint(arr)
:与np.round()
功能完全一致,返回四舍五入后的整数数组。
-
取整相关
np.floor(arr)
:向下取整(向负无穷方向取整),例如2.9→2
,-2.1→-3
。np.ceil(arr)
:向上取整(向正无穷方向取整),例如2.1→3
,-2.9→-2
。np.trunc(arr)
:截断小数部分(直接保留整数部分),例如2.9→2
,-2.9→-2
。np.floor_divide(a, b)
:对数组a
和b
执行向下取整除法(类似//
运算符)。
-
绝对值与符号
np.abs(arr)
/np.absolute(arr)
:计算数组元素的绝对值,例如-3.5→3.5
。np.sign(arr)
:返回数组元素的符号(正数→1,负数→-1,0→0)。
-
幂运算与对数
np.sqrt(arr)
:计算平方根(仅对非负数有效)。np.power(arr, n)
:计算数组元素的 n 次幂。np.exp(arr)
:计算自然指数(e 的幂)。np.log(arr)
/np.log10(arr)
:计算自然对数(底为 e)/ 常用对数(底为 10)。
二、数组操作函数(针对数组结构的处理)
-
数组形状调整
np.reshape(arr, new_shape)
:改变数组形状(元素总数不变)。np.flatten()
:将多维数组展平为一维数组(返回副本)。np.ravel()
:与flatten()
类似,但返回视图(修改会影响原数组)。
-
数组拼接与分割
np.concatenate((arr1, arr2), axis=0)
:沿指定轴拼接两个数组(默认 axis=0 为行方向)。np.vstack((arr1, arr2))
:垂直拼接(按行),np.hstack((arr1, arr2))
:水平拼接(按列)。np.split(arr, indices_or_sections, axis=0)
:沿指定轴分割数组。
-
统计相关
np.sum(arr)
:计算数组元素总和。np.mean(arr)
:计算平均值。np.max(arr)
/np.min(arr)
:计算最大值 / 最小值。np.argmax(arr)
/np.argmin(arr)
:返回最大值 / 最小值的索引。np.std(arr)
/np.var(arr)
:计算标准差 / 方差。
三、关键区别总结
round()
vsrint()
:功能完全一致,均为四舍五入到最近整数(银行家舍入法)。floor()
vsceil()
:前者向下取整,后者向上取整(方向相反)。trunc()
vsfloor()
:对正数效果相同(如2.9
都→2),对负数不同(-2.9
:trunc
→-2,floor
→-3)。
通过这些函数,可以高效处理 NumPy 数组的数值计算和结构调整,是数据分析和科学计算的基础工具。
6 Python 中移除列表元素的相关方法
python
在 Python 中,下面哪个方法or语句可以移除列表中指定位置的元素?
A pop()
B remove()
C clear()
D del
正确答案:AD
我们来详细复习一下 Python 中移除列表元素的相关方法,特别是针对 "指定位置" 的移除方式:
1. pop()
方法
- 功能:移除列表中指定索引位置的元素,并返回该元素的值
- 语法 :
list.pop(index)
- 说明 :
-
如果不指定索引,默认移除列表最后一个元素
-
示例: python
运行
pythonfruits = ['apple', 'banana', 'cherry'] removed = fruits.pop(1) # 移除索引1的元素 print(fruits) # 输出: ['apple', 'cherry'] print(removed) # 输出: 'banana'
-
2. del
语句
- 功能:删除列表中指定索引位置的元素(或整个列表)
- 语法 :
del list[index]
- 说明 :
-
不仅可以删除单个元素,还能删除切片(连续多个元素)
-
示例: python
运行
pythonfruits = ['apple', 'banana', 'cherry'] del fruits[0] # 移除索引0的元素 print(fruits) # 输出: ['banana', 'cherry'] # 删除切片 numbers = [1,2,3,4,5] del numbers[1:3] # 移除索引1到2的元素 print(numbers) # 输出: [1,4,5]
-
其他相关方法(对比区分)
-
remove()
方法 :
按 "元素值" 移除**第一个** 匹配项,而不是按位置。示例:
fruits.remove('banana')
(删除第一个值为 'banana' 的元素) -
clear()
方法 :清空列表中所有元素,使其变为空列表,不针对特定位置。
示例:
fruits.clear()
(结果为[]
)
总结
- 专门用于 "移除指定位置元素" 的是
pop()
方法 和del
语句(对应题目中的 A 和 D 选项) - 区分关键:
pop()
有返回值,del
无返回值;两者都需要指定索引位置