为了账号安全,请及时绑定邮箱和手机立即绑定

早些时候应该知道的关于Python列表的12条以上遗憾之事

标签:
Python

我们可以使用 * 来合并列表

我们可以使用 * 来合并列表。

更具体地说,当置于列表之前时,* 会使列表自身 扩展 到其容器内(例如另一个列表内)

我们可以将这与单个元素结合使用,并选择哪些列表要展开。

2) 我们可以使用 来解包列表, 作为解包操作符

让我们假设我们有一个包含一些关于狗的信息的列表——第一个元素是它的名字,第二个元素是它的年龄,其余的元素是它喜好的食物。

我们可以使用 * 来将列表的一部分 解包 到一个变量中。例如,我们希望单独获取名字和年龄这两个元素,但将最喜欢的食品作为一个列表来处理。

在这里,rocky 和 5 分别被赋值给 nameage

然而,fav_food 被分配给 一切未分配的项,并捕获所有未分配的元素,将其作为一个列表。

3) 使用 * 来解包列表作为函数参数

假设我们有一个简单的函数,它接受 (a, b, c) 并打印它们

如果我们有一个包含3个元素的列表,可以使用运算符将它解包后传递给该函数。运算符将列表的元素解包到其容器中。

在这里,假设 numbers = [1, 2, 3],test(*numbers) 相当于 test(1, 2, 3)

需要注意的是,在这种情况下,test(a, b, c) 接受 3 个参数,因此我们的输入参数列表必须包含三个参数。

4) 使用 zip() 函数可以同时并行遍历两个序列

内置的 zip() 函数 ,允许我们同时迭代 1 个或多个列表:

我们可以同时遍历3个甚至更多的列表:

5) enumerate() 函数用于迭代时同时生成索引和值

如果我们希望在迭代时同时生成索引和值,我们可以考虑使用内置的 enumerate() 函数。

简短休息

我最近写了一本书《101 Things I Never Knew About Python》,这本书详细介绍了这些我本可以更早学到的 Python 相关知识。

点击这里查看: https://payhip.com/b/vywcf

比较.sort()和sorted()之间的区别

.sort()和sorted()都是Python中的方法,用于对列表进行排序。.sort()是列表的一个方法,它会直接修改原列表,而sorted()是一个函数,它返回一个新的已排序列表,不会改变原列表。

.sort() 和 sorted() 都可以对列表进行排序,但它们之间有一个关键的区别。

.sort() 不返回任何值,而是直接在原地进行排序——这意味着原始列表本身会被直接排序。

sorted() 创建并返回我们列表的 一个已排序副本 — 意味着原始列表不会被改变。这在我们希望出于某些原因保留原始顺序时会很有用。

7. 使用带有自定义条件的 .sort() 排序

这既适用于 .sort() 方法,也适用于 sorted() 函数,但让我们仅以 .sort() 为例说明。默认情况下,.sort() 按升序对数字进行排序。

如果我们希望根据自定义条件进行排序,我们可以将自定义函数传递给 key 关键字参数。假设我们想根据 最后一个数字位 进行排序,从而得到 [22, 38, 19]

我们可以采用等效的lambda函数来简化这段内容,如果愿意的话。

8) 列表生成式

假设我们有一份水果清单,我们想要将它们转换为大写。这是我们可以采取的一种基本方法:

不过,我们可以使用列表推导式以更优雅的一行代码完成此操作。在这里,.upper() 转换是在列表推导式内部的 应用的。

我们可以添加一个条件来筛选我们想要保留的水果。例如,只保留长度为5或更长的水果。

9) 元组与列表的比较

元组本质上是不可变的序列。这意味着我们不能在创建元组后对其进行修改(添加或删除元素)。

我们使用圆括号而不是方括号来定义一个元组为:

使用元组而非列表的缺点:

  • 由于元组是不可变的,我们不能向元组中添加新元素
  • 由于元组是不可变的,我们也不能从元组中移除元素

使用元组而非列表的好处:

  • 元组是不可变的,这意味着它们可以被哈希
  • 元组是可哈希的,这意味着它们可以作为字典的键(列表不可以)
  • 元组是可哈希的,这意味着它们可以被加入到集合中(列表不可以)
10): The .insert(index, element) 插入方法

我们可能已经熟悉列表的 _.append() 方法,该方法在列表的末端添加一个新的元素。

但是你知道吗,我们也有 _.insert() 方法,可以将新元素放在我们希望的任何索引处?

在索引 0 插入 'AAA' —— 'AAA' 将位于我们的列表中的索引 0,其他所有元素将向后移动一位。

在索引 1 插入 'AAA' 后,'AAA' 将位于我们的列表中的索引 1,其余所有元素将向后移一位。

注意——所有位于我们插入的索引之后的元素将会被向后推移一个索引位置,这意味着此操作的时间复杂度为O(n),即线性时间复杂度。也就是说,如果列表中的元素数量很多,此操作可能会比较耗时。

11) .extend(other_list) # 扩展列表的方法

我们可以使用Lodash框架中的 _.extend() 方法将一个列表的所有元素添加到另一个列表的末尾。

在这里的 _a.extend(b) 方法中,我们将 b 中的所有内容添加进 a。而 b 保持不变:

从技术角度来看,我们可以做 a = a + b,但这种方法会创建一个新的列表,然后将其赋值给 a。这使得这种方法在内存使用上不够高效。

12) list[start:end] = [1, 2, 3] # 将列表的指定部分替换为新的值

你可能知道的是,我们可以使用~list[index] = new_element~来替换列表中的特定元素。

但你知道我们可以通过这种方式替换一系列元素吗?

*这里,ls[0:3] 表示列表 ['apple', 'boy', 'cat']

  • ls[0:3] = [1, 2, 3] 表示 Python 会将 ls[0:3] 的值从 ['apple', 'boy', 'cat'] 替换为 [1, 2, 3]

请注意 — 范围的长度不必相等。我们可以用一个元素替换长度为3的范围中的内容,如下所示:

Python列表的17个重要知识点

请在_SUBSTACK页面阅读完整帖子,如果愿意支持我,请多多支持。

Python 列表的 17 个遗憾未及早了解的事项1) 我们可以使用 * 来操作列表,例如合并
如果你想支持我作为创作者,
  • 加入我的 Substack 通讯:https://zlliu.substack.com/ — 我每周发送与 Python 相关的电子邮件
  • 购买我的书:Python 的 101 个我不知道的事情https://payhip.com/b/vywcf
  • 为这个故事点赞 50 次
  • 留言告诉我你的想法
  • 标出你最喜欢的部分

    谢谢!这些小小的行动意义深远,我非常感激!

YouTube: YouTube (yóu yù tè bō)

领英个人资料:https://www.linkedin.com/in/zlliu/

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消