程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(2)

斤斤计较之Python:列表

发布于2019-09-11 14:11     阅读(1585)     评论(0)     点赞(28)     收藏(4)


1、基本操作

列表可以是 a = 'abcde'、b = ['a','b','c','d','e']    (注意字符串索引不允许被赋值,但列表索引可以被修改)

+‐‐‐+‐‐‐+‐‐‐

| a | b | c | d | e |

+‐‐‐+‐‐‐+‐‐‐

  0   1   2   3  4

‐4  ‐3  ‐2  ‐1

a[0] == b[0]=='a'

a[-1]==b[-1]=='e'

a[0:2]==a[:2]=='ab'

b[0:2]==b[:2]==['a','b']

b[::-1] = ['e', 'd', 'c', 'b', 'a']

a[::-1] == 'edcba'

a[-2:] ==  'de'

2、把列表当作堆栈使用

我们都知道列表有两个操作,一个是append(),一个是pop()。我们可以把append函数看为一个入栈的操作,将pop()为一个出站的操作。而且满足的是先进后出的思维,正好与栈相仿。

harry= [1, 2, 3]

>>> harry.append(4)

>>> harry.append(5)

>>> harry

[1,2,3,4,5]

>>> harry.pop()

5

>>> harry

[1,2,3,4]

>>> harry.pop()

4

>>> harry.pop()

3

>>> harry

[1,2]

3、把列表当作队列使用

我们知道列表中有一个insert()函数,当使用list1.insert(0,x),时会在list1的首位插入元素x,而使用pop()可以从列表的最后一位删去元素。所以能够模拟进队出队操作。但是insert()的效率非常低为O(n),所以不推荐使用这种方法构建队列。

而使用库from collections import deque能够实现效率为O(1)的队列。

from collections import deque

>>> queue= deque([1,2,3])

>>> queue.append(4)

>>> queue.append(5)

>>>queue

deque([1,2,3,4,5])

>>> queue.popleft()

1

>>> queue.popleft() # The second to arrive now leaves

2

>>> queue

deque([3,4,5])

也就是说,append()相当于入队操作,popleft()相当于出队操作

4、列表推导式

当我们项创建一个列表式如:

cubes= []

for i in range(5):

x = i**3

cubes.append(x)

cubes= [0,1,8,27,64]

可以进行创建,但是创建完毕之后使用的变量x的值是存在的,也就是说产生了垃圾内存。

我们还可以使用列表推导式的方法就不会出现这种麻烦:

cubes= list(map(lambda x: x**3, range(5))) # 求0-4五个数的立方复制给cubes   

cubes= [x**2 for x in range(5)]  # 求0-4五个数的立方复制给cubes

 

当然还可使用if:cubes= [x**2 for x in range(5) if x%2]  # 求奇数的立方

 

列表推导式还可以进行嵌套操作,当我们将一个矩阵进行转置是就可以使用列表嵌套操作:

matrix =[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]]  # 创建一个3 * 4的矩阵

[[row[i] for row in matrix] for i in range(4)]  # 将矩阵转换成4 * 3的矩阵形式

[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

当然使用list(zip(*matrix))进行转置会更加方便

上述的操作与两层for循环嵌套在时间复杂度上并没有什么提升,他只是将算法变得简洁易懂了。

本人的另一篇博文详细记录了python列表的操作函数表格:传送门



所属网站分类: 技术文章 > 博客

作者:前方一片漆黑

链接:https://www.pythonheidong.com/blog/article/107246/30c16565474373e5742f/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)