Python数据结构

本文详细介绍了Python中列表的基本操作方法,如append、extend、insert等,以及如何利用列表作为堆栈和队列。此外,还深入探讨了函数式编程工具如filter、map和reduce的使用,列表推导式的高效运用,以及del语句和元组、集合、字典的特性。通过实例演示了这些功能的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列表

  1. list常用方法:
    list.append(x): 把一个元素(x)添加到链表 list 的结尾;
    list.extend(L): 将一个给定列表中的所有元素都添加到另一个列表中;
    list.insert(i, x): 在指定位置插入一个元素;
    list.remove(x): 删除链表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
    list.pop([i]) : 从链表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop() 返回最后一个元素。元素随即从链表中被删除。
    list.index(x): 返回链表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
    list.count(x): 返回 x 在链表中出现的次数。
    list.sort(cmp=None, key=None, reverse=False): 对链表中的元素就地进行排序(参数可以用来自定义排序方法,参考 sorted() 的更详细的解释)。
    list.reverse(): 就地倒排链表中的元素。
  2. 把链表当作堆栈(先进后出)来用:
        用 append() 方法可以把一个元素添加到堆栈顶。
        用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。
  3. 把链表当作队列(先进先出)来使用:
        队列: 相对堆栈来说,从列表末尾添加和弹出很快;在头部插入和弹出很慢(为了一个元素,要移动整个列表中的所有元素)。
        队列实现: 要实现队列,使用 collections.deque,它为在首尾两端快速插入和删除而设计。
         点击可以直接访问相关文档: collections.deque
    链接: link.

函数式编程工具

     对于链表来讲,有三个内置函数非常有用: filter(),map() 以及 reduce()。

  1. filter(function, sequence): 返回一个序列,包括了给定序列中所有调用 function(item) 后返回值为 true 的元素(如果可能的话,会返回相同的类型)。如果该序列 (sequence)是一个 str, unicode 或者 tuple,返回值必定是同一类型,否则,它总是 list。
例如,以下程序可以计算一个被 3 或者 5 整除的序列:
def f(x): 
    return x % 3 == 0 or x % 5 == 0

filter(f, range(2, 25))

输出结果:[3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]
  1. map(function, sequence) : 为每一个元素依次调用 function(item) 并将返回值组成一个链表返回。
例如:以下程序可以计算立方:
def cube(x): 
    return x*x*x
    
map(cube, range(1, 11))

输出结果:[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
  1. reduce(function, sequence) : 返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数 function,再以返回值和第三个参数调用,依次执行下去。
例如,以下程序计算 1 到 10 的整数之和:
def add(x,y): 
    return x+y
reduce(add, range(1, 11))

输出结果:55

列表推导式

eg1: squares = [x**2 for x in range(10)]   # 更简洁、明了 
类似于:squares = map(lambda x : x**2, range(10))

eg2: [(x, y) for x in range(1,4) for y in range(2,5) if x != y]

eg3: 矩阵行列互换:(嵌套的列表推导式)
matrix = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
[[row[i] for row in matrix] for i in range(4)]  类似于 => list(zip(*matrix))

del语句

del: 按照索引删除,无返回值。
pop: 删除,返回被删除的值。

eg: del a[0]
    del a[2:5]
del也可以删除整个变量: del a

元组和序列

元组,不可变。 在应用上,大致与 list 相似
创造0个元素的元组: empty = ()
创造1个元素的元组: single = ‘hello’,      “,”不能少,否则会被当成是个字符串

集合

特点: 无序,不重复
集合对象包含的数学运算: 联合(union)、交(intersection)、差(differrence)、对称差集(sysmmetric differrence)

a = set('abracadabra') # set(['a', 'r', 'b', 'c', 'd'])
b = set('alacazam')    # set(['a', 'l', 'z', 'c', 'm'])
a - b                  # 元素属于a,但不属于b => set(['r', 'd', 'b'])
a | b                  # 元素属于a或b(并集) => set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
a & b                  # 元素属于a,且属于b(交集) => set(['a', 'c'])
a ^ b                  # 元素属于a或b,但是不属于其交集(异或) => set(['r', 'd', 'b', 'm', 'z', 'l'])

字典

dict: 以键值对的形式存在

循环遍历技巧

点击访问Python基础类型总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值