这篇文章介绍了Python的一些不错的功能listset以及tuple数据类型。我最近了解了这些,发现它们很有趣,并想与您,我的程序员伙伴分享。

这是最有趣的部分。我们将了解运算符<, <=, >, >=如何处理集合操作数。==运算符对集合的作用有些明显,但是当我们冒险对集合进行排序时,会有一些有趣的行为。如果您之前没有考虑过这一点,请在进一步阅读之前尝试猜测比较运算符的工作原理。

<span style="background-color:#f2f2f2"><span style="color:#292929">{'bread'} <= {'bread', 'butter'}
# 真</span><span style="color:#292929">{'bread', 'jam'} <= {'bread', 'butter'}
# 假</span><span style="color:#292929">{'bread'} <= {'bread'}
# 真</span></span>

这是里摹HT!<=issubseton重载set<运算符上定义的行为略有不同:

<span style="background-color:#f2f2f2"><span style="color:#292929">{'bread'} < {'bread', 'butter'}
# 真</span><span style="color:#292929">{'bread'} < {'bread'}
# 假</span></span>

区别在于<定义左操作数是否是右操作数的严格子集。这意味着左操作数是右操作数的子集,但不等于右操作数。这可能是一个有用的区别,特别是因为 上没有isstrictsubsetisstrictsuperset方法set

我不会详细介绍>和的行为>=,因为您可以或多或少地用超集替换子集,并在上一节中进行乘以 -1 的代数等价。让我们这样做:

<span style="background-color:#f2f2f2"><span style="color:#292929">{'bread', 'butter'} >= {'bread'}
# 真</span><span style="color:#292929">{'bread', 'jam'} >= {'bread', 'butter'}
# 假</span><span style="color:#292929">{'bread'} >= {'bread'}
# 真</span><span style="color:#292929">{'bread', 'butter'} > {'bread'}
# 真</span><span style="color:#292929">{'bread'} > {'bread'}
# 假</span></span>

现在您可以对集合进行链式比较:

<span style="background-color:#f2f2f2"><span style="color:#292929">{'bread'} <= {'bread', 'butter'} <= {'bread', 'butter', 'eggs'}
# 真</span></span>

在这里,我无偿地添加了等效的代码,issubset用于显示我们已经走了多远:

<span style="background-color:#f2f2f2"><span style="color:#292929">{'bread'}.issubset({'bread', 'butter'}) 和 {'bread', 'butter'}.issubset({'bread', 'butter', 'eggs'})</span></span>

奖金

不起眼的^运算符,它因对称差异而过载。这是什么意思?它是出现在一个但不是左右操作数中的一组元素:

<span style="background-color:#f2f2f2"><span style="color:#292929">def symmetric_difference(a: set, b: set) -> set:     return {elt for elt in a | b if (elt in a) ^ (elt in b)}</span><span style="color:#292929">symmetry_difference({'bread', 'butter'}, {'bread', 'jam'})
# {'butter', 'jam'}</span><span style="color:#292929">{'bread', 'butter'} ^ {'bread', 'jam'}
# {'butter', 'jam'}</span></span>

注意^集合理解中的 。从头到尾都是异或!

列表、元组、字符串,天哪!

列表、元组和字符串上的比较运算符的工作方式相同。运算符<, <=, >, >=定义了字典顺序,这是一种根据对象元素的顺序对对象序列进行排序的方法。这是字母排序的概念,推广到包含定义了<>运算符的任何类型对象的序列。这就是事情变得奇怪的地方!

让我们从字符串开始:

<span style="background-color:#f2f2f2"><span style="color:#292929">'01' == '01'
# 真</span><span style="color:#292929">'01' < '10'
# 真</span><span style="color:#292929">'11' < '2'
# 真</span><span style="color:#292929">'2' > '10' > '1'
# 真</span></span>

请注意,这与列表的工作方式相同:

<span style="background-color:#f2f2f2"><span style="color:#292929">[0, 1] == [0, 1]
# 真</span><span style="color:#292929">[0, 1] < [1, 0]
# 真</span><span style="color:#292929">[1, 1] < [2]
# 真</span><span style="color:#292929">[2] > [1, 0] > [1]
# 真</span></span>

和元组:

<span style="background-color:#f2f2f2"><span style="color:#292929">(0, 1) == (0, 1)
# 真</span><span style="color:#292929">(0, 1) < (1, 0)
# 真</span><span style="color:#292929">(1, 1) < (2,)
# 真</span><span style="color:#292929">(2,) > (1, 0) > (1,)
# 真</span></span>

奖金

您甚至可以比较异构类型的列表:

<span style="background-color:#f2f2f2"><span style="color:#292929">[2, 'a'] < [2, 'b']
# 真</span><span style="color:#292929">[2, [1, 0]] < [2, [2, 1]] # (:
# 真</span></span>

只需确保类型按元素匹配即可:

<span style="background-color:#f2f2f2"><span style="color:#292929">[3, 4] < [3, 'a']
# 类型错误:'int' 和 'str' 实例之间不支持 '<'</span></span>

结论

我希望这次探索能让您思考您的编程语言可以做什么和该做什么,而不是重用您已经看过的代码片段。下次您想到某事并想知道它是否有效时,请尝试一下!

七爪网7claw.com

3 个鲜为人知的 Python 特性相关推荐

  1. 【Python】有趣且鲜为人知的 Python 特性,火了!

    小编最近逛Github发现了一个给力的Python项目,绝对能让你傻眼!可以通过这个项目测试你对Python的熟悉程度! 这个项目叫做 "What the f*ck Python! ???? ...

  2. 一份鲜为人知的Python特性

    GitHub 上有个非常牛逼的仓库,作者收集了很多有趣且鲜为人知的 Python "特性".这些特性有些是真正的特性,也有些是陷阱,因为光从表面看起来就觉得反人类直觉,而所有的一切 ...

  3. WTF Python:有趣且鲜为人知的Python特性

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 All problems, and ultimately is a matt ...

  4. 有趣且鲜为人知的 Python 特性,火了!

    小编最近逛Github发现了一个给力的Python项目,绝对能让你傻眼!可以通过这个项目测试你对Python的熟悉程度! 这个项目叫做 "What the f*ck Python!

  5. 后悔没早知道这些Python特性

    写 Python 也好几年时间了.讲道理,在工作中大家肯定遇到过这样的场景: 这个故事告诉我们什么?先造轮子再去 GitHub?还是提高下 GitHub 搜索技巧? 都不是! 实际上,在日常的工作中, ...

  6. 5 个越早知道越好的 Python 特性

    2019-12-29 18:04 导语:Python 有很多特性,初学者很难一开始就掌握所有的特性.现在我想要重点介绍其中五个最重要的特性. Kirill Sharkovski 发布在 Unsplas ...

  7. python版本越高越好吗-5个Python特性 越早知道越好的

    Python Python开发 Python语言 5个Python特性 越早知道越好的 Kirill Sharkovski 发布在 Unsplash 杂志上的照片 AI开发者按,Python 是近十年 ...

  8. python 默认参数_有趣的 Python 特性 3 | 当心默认可变参数这个大猪蹄子。

    本文字数:1575 字 阅读本文大概需要:4 分钟 写在之前 Python 提供了很多让使用者觉得舒服至极的功能特性,但是随着不断的深入学习和使用 Python,我发现其中存在着许多玄学的输出与之前预 ...

  9. 5个Python特性 越早知道越好的

    Kirill Sharkovski 发布在 Unsplash 杂志上的照片 AI开发者按,Python 是近十年来兴起的编程语言,并且被证明是一种非常强大的语言.我用 Python 构建了很多应用程序 ...

最新文章

  1. php签名是做什么用的,这个签名在PHP中意味着什么()?
  2. 【操作系统】进程的描述与控制(这知识它不进脑子啊~!)
  3. android Instrumentation 转载
  4. 【剑指offer】面试题58 - II:左旋转字符串(Java)
  5. PowerDesigner导出表为Excel(转)
  6. idea创建javaweb项目连接mysql【HTTP Status 500】
  7. Vue组件学习之组件自定义事件
  8. IE、FireFox、Opera三种浏览器Document对象的方法对比
  9. 阿里开发者们的第17个感悟:无细节不设计,无设计不架构
  10. 【愚公系列】2022年04月 微信小程序-image图片
  11. [Unity3D] [学习] Unity3D的官方文档
  12. 经典指标:SAR算法和应用
  13. win10系统C盘突然红了爆满占了170G找了几天怎么也找不到哪个文件占用这么多磁盘空间
  14. 8-2 sdust-Java-文件读取与统计【人工判编程题】 (30 分)
  15. 自学 1 年进大厂,这位硬核 Linux 大佬你还不知道?
  16. matlab将图片导入工作区,matlab数据的导入和导出,以matlab工作区workspace为source和destination...
  17. 一缕黑暗中的火光-----------活动图--------------优雅的建模语言
  18. 通过Gearman实现MySQL到Redis的数据复制
  19. 笔试练习题001...to be continued...
  20. Linaro系统获取root权限方法

热门文章

  1. 36岁的联想回头看,尽是18岁的影子
  2. 转载:小白如何成为初级WebGIS开发工程师
  3. win11更新后Translucent TB 任务栏透明失效
  4. 快速入门!Python爬虫,京东自动登录,在线抢购商品!
  5. 游戏服务器怎么设置防护?游戏服务器安全防护策略
  6. OKR:从0到100
  7. 你是否还对pycharm的高级使用一头雾水? 手把手教你快速高效使用pycharm英文界面各种实用功能, 附带常见英文解释
  8. 卷(一)C++___二刷
  9. 一罐子水是如何电击上千人的呢?
  10. WScript.CreateObject(WScript.Shell)