关于Python列表解析式以及初始化指定size列表

导读:本篇文章讲解 关于Python列表解析式以及初始化指定size列表,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

今天遇到初始化列表的问题,在这里记一点东西。
本篇的主要内容:

  • Python中列表解析的方式
  • 初始化指定长度的列表的方法

关于Python列表解析

列表解析可以快速将一个列表通过操作转化为另一个列表(其实不只是list,只要是可迭代对象(iterable)都可以)。
如果观察一下列表解析式与对应的for循环,就会发现这两种方式是一样的,例如,我要将某个列表的所有元素都变为二倍:

b =[]
for i in a:
    b.append(i*2)
print(b)

a = [1,2,3,4]
b = [i*2 for i in a]
print(b)

其实就是简化了一下循环。
有的时候,还需要再循环的过程中添加判断的条件,这时候就要进行一点点改变了,添加一个if条件就可以了,例如,从某个 列表中,找出所有的偶数:

a = list(range(10))
b = [item for item in a if item%2==0]
print(b)

# 输出:[0,2,4,6,8]

接着来看一种更复杂的情况,如何使用列表解析的方式对二维列表机进行操作?这个问题还是比较常见的,例如,我要把一个二维列表进行展平(flat),也就是拉成一维列表的形式,我觉得按照上面的思路,很多人都会这样写:

a = [[1,2,3], [4,5,6], [7,8,9]]

b = [item for item in row for row in a]

从后面来看,先拿到行,然后再取出行中的每一个元素,想法是这样的,但是实际上是不对的,这里需要注意,如果使用列表解析方式处理循环,注意嵌套的顺序与for循环是一样的,什么意思呢?先看正确的打开方式:

b = [item for row in a for item in row]
print(b)

# 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

如果用嵌套循环的方式实现相同的结果:

b = []
for row in a:
    for item in row:
        b.append(item)
print(b)

结果是一样的,可看到外层循环是row变量,访问行,内层变量是item,访问的row中的列,这个顺序是与列表解析中的顺序是一样的。
如果为了更清楚,还可以这样写列表解析式:

b = [
    item
    for row in a
    for item in row
]
print(b)

这样的话,我们就又回到了for循环里了。

关于初始化指定长度的列表

这是我最近遇到的一个问题,虽然Python的列表功能非常强大,可以通过列表非常方便地实现栈或者队列功能,但是有的时候我们还是需要像C++一眼先声明一个某个大小地列表,然后通过index进行访问。

首先是对于一维列表:

如果对于列表的内容无所谓,可以使用这样的方式:

a = list(range(5))

这是最简单的方式创建了一个长度为5的列表,如果希望每个元素都是None,可以用这种方式进行初始化:

a = [None] * 3
print(a)

# 输出:[None, None, None]

接下来,对于初始化二维列表:

# 初始化获得一个3*3的列表
a = [[i for i in range(3)] for i in range(3)]
print(a)
#[[0, 1, 2], [0, 1, 2], [0, 1, 2]]

同样,对应一维列表的第二种方式

a = [[None]*3 for i in range(3)]
print(a)
#[[None, None, None], [None, None, None], [None, None, None]]

参考:
这一篇总结的很条理:
轻松学会Python列表解析式

如何简洁地生成一个有N个None元素的列表

Python中快速创建指定大小的list的方法

以上~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116719.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!