3 个鲜为人知的 Python 特性
这篇文章介绍了Python的一些不错的功能list
,set
以及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!<=
与issubset
on重载set
。<
运算符上定义的行为略有不同:
<span style="background-color:#f2f2f2"><span style="color:#292929">{'bread'} < {'bread', 'butter'}
# 真</span><span style="color:#292929">{'bread'} < {'bread'}
# 假</span></span>
区别在于<
定义左操作数是否是右操作数的严格子集。这意味着左操作数是右操作数的子集,但不等于右操作数。这可能是一个有用的区别,特别是因为 上没有isstrictsubset
或isstrictsuperset
方法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 特性相关推荐
- 【Python】有趣且鲜为人知的 Python 特性,火了!
小编最近逛Github发现了一个给力的Python项目,绝对能让你傻眼!可以通过这个项目测试你对Python的熟悉程度! 这个项目叫做 "What the f*ck Python! ???? ...
- 一份鲜为人知的Python特性
GitHub 上有个非常牛逼的仓库,作者收集了很多有趣且鲜为人知的 Python "特性".这些特性有些是真正的特性,也有些是陷阱,因为光从表面看起来就觉得反人类直觉,而所有的一切 ...
- WTF Python:有趣且鲜为人知的Python特性
点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 All problems, and ultimately is a matt ...
- 有趣且鲜为人知的 Python 特性,火了!
小编最近逛Github发现了一个给力的Python项目,绝对能让你傻眼!可以通过这个项目测试你对Python的熟悉程度! 这个项目叫做 "What the f*ck Python!
- 后悔没早知道这些Python特性
写 Python 也好几年时间了.讲道理,在工作中大家肯定遇到过这样的场景: 这个故事告诉我们什么?先造轮子再去 GitHub?还是提高下 GitHub 搜索技巧? 都不是! 实际上,在日常的工作中, ...
- 5 个越早知道越好的 Python 特性
2019-12-29 18:04 导语:Python 有很多特性,初学者很难一开始就掌握所有的特性.现在我想要重点介绍其中五个最重要的特性. Kirill Sharkovski 发布在 Unsplas ...
- python版本越高越好吗-5个Python特性 越早知道越好的
Python Python开发 Python语言 5个Python特性 越早知道越好的 Kirill Sharkovski 发布在 Unsplash 杂志上的照片 AI开发者按,Python 是近十年 ...
- python 默认参数_有趣的 Python 特性 3 | 当心默认可变参数这个大猪蹄子。
本文字数:1575 字 阅读本文大概需要:4 分钟 写在之前 Python 提供了很多让使用者觉得舒服至极的功能特性,但是随着不断的深入学习和使用 Python,我发现其中存在着许多玄学的输出与之前预 ...
- 5个Python特性 越早知道越好的
Kirill Sharkovski 发布在 Unsplash 杂志上的照片 AI开发者按,Python 是近十年来兴起的编程语言,并且被证明是一种非常强大的语言.我用 Python 构建了很多应用程序 ...
最新文章
- php签名是做什么用的,这个签名在PHP中意味着什么()?
- 【操作系统】进程的描述与控制(这知识它不进脑子啊~!)
- android Instrumentation 转载
- 【剑指offer】面试题58 - II:左旋转字符串(Java)
- PowerDesigner导出表为Excel(转)
- idea创建javaweb项目连接mysql【HTTP Status 500】
- Vue组件学习之组件自定义事件
- IE、FireFox、Opera三种浏览器Document对象的方法对比
- 阿里开发者们的第17个感悟:无细节不设计,无设计不架构
- 【愚公系列】2022年04月 微信小程序-image图片
- [Unity3D] [学习] Unity3D的官方文档
- 经典指标:SAR算法和应用
- win10系统C盘突然红了爆满占了170G找了几天怎么也找不到哪个文件占用这么多磁盘空间
- 8-2 sdust-Java-文件读取与统计【人工判编程题】 (30 分)
- 自学 1 年进大厂,这位硬核 Linux 大佬你还不知道?
- matlab将图片导入工作区,matlab数据的导入和导出,以matlab工作区workspace为source和destination...
- 一缕黑暗中的火光-----------活动图--------------优雅的建模语言
- 通过Gearman实现MySQL到Redis的数据复制
- 笔试练习题001...to be continued...
- Linaro系统获取root权限方法
热门文章
- 36岁的联想回头看,尽是18岁的影子
- 转载:小白如何成为初级WebGIS开发工程师
- win11更新后Translucent TB 任务栏透明失效
- 快速入门!Python爬虫,京东自动登录,在线抢购商品!
- 游戏服务器怎么设置防护?游戏服务器安全防护策略
- OKR:从0到100
- 你是否还对pycharm的高级使用一头雾水? 手把手教你快速高效使用pycharm英文界面各种实用功能, 附带常见英文解释
- 卷(一)C++___二刷
- 一罐子水是如何电击上千人的呢?
- WScript.CreateObject(WScript.Shell)