阅读 193

在python中快速创建一个列表应该这样做

背景问题

如果,我要创建[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],这样的一个列表,应该如何做?

当然,我们可以直接把这个列表写下来

# 直接将其写成一个列表,是一种方法 # 但是,不是一种好的方法 # 比如要创建从1到100的列表的话,我们没办法真的把全部元素都写出来 li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 复制代码

解决方法

我们有很多种办法可以解决这样一个问题

方法一:通过list()

python中有一个函数叫做range(),可以生成一个序列。如果我们需要1-10这样一个序列,只需要使用range(1, 11)就可以了。这个曾经在python2的时候,range(1, 11)得到的就是一个列表。但是在python3中,由于进行了性能优化,现在已经不再是一个列表了,但是我们仍然可以通过list(),将其变为一个列表

li = list(range(1, 11)) 复制代码

方法二:通过循环

通过循环添加,得到一个列表

li = [] # 循环1-10,将其添加到事先准备好的空列表中 for i in range(1, 11):     li.append(i) 复制代码

当然,循环添加的方法是多种多样的

li = [] # 效果等同于append() for i in range(1, 11):     li += [i] 复制代码

方法三:通过列表生成式

由于通过循环添加得到一个列表的方法比较麻烦(指的是可能要写成多行),为了能够在一行中解决这样一个问题,因此,python中还有一种叫做列表生成式的语法,可以在同一行中,解决这样一个问题。

# 仅使用一行,就可以解决这样一个问题了 li = [i for i in range(1, 11)] 复制代码

列表生成式

列表生成式,也可以叫做列表推导式,是一种非常方便的生成列表的方法。在之前的演示中,我们已经体会到了将其写在一行中的好处。

不过,有可能有人有疑问,使用list()也同样只用了一行啊,为什么还需要列表生成式呢?

当然,在一个简单的需求中,我们很难直接体会到使用列表生成式的好处,但是在复杂的需求中,我们就可以发现,使用列表生成式是有好处的。

单次循环

如果,我们要创建[1, 4, 9, 16, 25, 36, 49, 64, 81, 100],这样一个列表,也就是1-10所有数的平方,应该如何做

显然,对于这样一个不算困难的需求,我们使用list()已经不是很好解决了

# 传统的方法,通过循环添加 old_li = [] for i in range(1, 11):     old_li.append(i * i)   # 使用新的列表推导式的方法,一行解决 new_li = [i * i for i in range(1, 11)] 复制代码

实际上,我们可以看出,通过循环的方法,和直接写在列表推导式中的方法,是一样的,两者可以互相替代。也就是说,如果你完全不使用列表推导式,也是没问题的。

多次循环

比如,我们要输出一个九九乘法表

li = ["%s * %s = %s" % (i, j, i * j) for i in range(1, 10) for j in range(1, 10)] 复制代码

有多次的循环,直接写在后边即可,以上代码相当于

li = [] for i in range(1, 10):     for j in range(1, 10):         li.append("%s * %s = %s" % (i, j, i * j)) 复制代码

if条件判断

我们又有这样的一个新的需求,可能我们平时使用九九乘法表的时候,只需要1 * 2 = 2就可以了,不需要2 * 1 = 2,那么,我们可以这样做

# 只要在原本的列表生成式的后边,加上一个if i <= j的判断,即可完成任务 li = ["%s * %s = %s" % (i, j, i * j) for i in range(1, 10) for j in range(1, 10) if i <= j] 复制代码

这段代码相当于

li = [] for i in range(1, 10):     for j in range(1, 10):         if i <= j:             li.append("%s * %s = %s" % (i, j, i * j)) 复制代码

总结

列表生成式是一种快速而简洁的写法,如果你可以熟练掌握的话,那么,可以轻松创建出一个你需要的列表。不过,列表生成式并非是必须的,它在任何时候,都可以被循环所代替。因此,如果你觉得写一个列表生成式对你来说有困难的话,也可以直接选择循环。


作者:瞎老弟python
链接:https://juejin.cn/post/7023708613537431560


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐