Python 集合推导式中的字符串是怎样排序的?有谁知道?

简介: Python 集合推导式中的字符串是怎样排序的?有谁知道?

列表推导式都是按for循环的顺序来排列的,可是集合推导式中除了纯数字的集合外,有字符串的集合都是乱序的,到底是按什么规律排的?有谁知道什么原理?

Python 3.8.8 (tags/v3.8.8:024d805, Feb 19 2021, 13:08:11) [MSC v.1928 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> [chr(i+48) for i in range(10)]
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> ["%dA"%i for i in range(10)]
['0A', '1A', '2A', '3A', '4A', '5A', '6A', '7A', '8A', '9A']
>>> ["A%d"%i for i in range(10)]
['A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9']
>>> {i for i in range(10)}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> {"A%d"%i for i in range(10)}
{'A0', 'A5', 'A3', 'A1', 'A4', 'A6', 'A2', 'A9', 'A7', 'A8'}
>>> {"A%d"%i for i in range(10)}
{'A0', 'A5', 'A3', 'A1', 'A4', 'A6', 'A2', 'A9', 'A7', 'A8'}
>>> {"%dA"%i for i in range(10)}
{'8A', '9A', '4A', '1A', '7A', '6A', '2A', '0A', '3A', '5A'}
>>> {"%dA"%i for i in range(10)}
{'8A', '9A', '4A', '1A', '7A', '6A', '2A', '0A', '3A', '5A'}
>>> {i for i in range(10)}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> {"%dA"%i for i in range(10)}|{i for i in range(10)}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '6A', '2A', '3A', '5A', '8A', '1A', '7A', '0A', '4A', '9A'}
>>> {i for i in range(10)}|{"%dA"%i for i in range(10)}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '6A', '2A', '3A', '5A', '8A', '1A', '7A', '0A', '4A', '9A'}
>>> {i for i in range(10)}|{"A%d"%i for i in range(10)}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A0', 'A5', 'A1', 'A4', 'A3', 'A6', 'A2', 'A9', 'A7', 'A8'}
>>> {chr(i+48) for i in range(10)}
{'3', '4', '9', '2', '8', '5', '6', '7', '0', '1'}
>>> {chr(i+48) for i in range(10)}
{'3', '4', '9', '2', '8', '5', '6', '7', '0', '1'}
>>>



纯数字的,即使是随机生成的集合也会以升序排列:

>>> from random import randint as rnd
>>> {rnd(0,20) for i in range(20)}
{0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 16, 19}
>>> {rnd(0,20) for i in range(20)}
{0, 2, 4, 5, 6, 8, 12, 13, 14, 15, 18}
>>> {rnd(0,20) for i in range(20)}
{0, 3, 6, 7, 8, 9, 10, 12, 13, 14, 18, 20}
>>> 


列表强制转换到集合,也是乱序的,顺序还与推导式直接生成的不一致。又是为什么?

>>> ["A%d"%i for i in range(10)]
['A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9']
>>> set(["A%d"%i for i in range(10)])
{'A0', 'A5', 'A3', 'A1', 'A4', 'A6', 'A2', 'A9', 'A7', 'A8'}
>>> {"%dA"%i for i in range(10)}
{'8A', '9A', '4A', '1A', '7A', '6A', '2A', '0A', '3A', '5A'}
>>> sorted({"%dA"%i for i in range(10)})
['0A', '1A', '2A', '3A', '4A', '5A', '6A', '7A', '8A', '9A']
>>> set(sorted({"%dA"%i for i in range(10)}))
{'8A', '9A', '4A', '1A', '7A', '6A', '2A', '0A', '3A', '5A'}
>>> 



同样的方法,在字典推导式中也升序排列的。

>>> {i for i in range(10)}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> {"A%d"%i for i in range(10)}
{'A8', 'A4', 'A2', 'A3', 'A9', 'A0', 'A5', 'A6', 'A1', 'A7'}
>>> type({"A%d"%i for i in range(10)})
<class 'set'>
>>>
>>> {"A%d"%i:i for i in range(10)}
{'A0': 0, 'A1': 1, 'A2': 2, 'A3': 3, 'A4': 4, 'A5': 5, 'A6': 6, 'A7': 7, 'A8': 8, 'A9': 9}
>>> type({"A%d"%i:i for i in range(10)})
<class 'dict'>
>>>
>>> {i:"A%d"%i for i in range(10)}
{0: 'A0', 1: 'A1', 2: 'A2', 3: 'A3', 4: 'A4', 5: 'A5', 6: 'A6', 7: 'A7', 8: 'A8', 9: 'A9'}
>>> 
目录
相关文章
|
3月前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
107 1
思科设备巡检命令Python脚本大集合
|
2月前
|
Python
在 Python 中,如何将日期时间类型转换为字符串?
在 Python 中,如何将日期时间类型转换为字符串?
131 64
|
1月前
|
存储 测试技术 Python
Python 中别再用 ‘+‘ 拼接字符串了!
通过选择合适的字符串拼接方法,可以显著提升 Python 代码的效率和可读性。在实际开发中,根据具体需求和场景选择最佳的方法,避免不必要的性能损失。
47 5
|
1月前
|
Python
使用Python计算字符串的SHA-256散列值
使用Python计算字符串的SHA-256散列值
41 7
|
2月前
|
Python
在 Python 中,如何将字符串中的日期格式转换为日期时间类型?
在 Python 中,如何将字符串中的日期格式转换为日期时间类型?
43 6
|
2月前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
2月前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
2月前
|
Python
探索Python中的列表推导式
【10月更文挑战第38天】本文深入探讨了Python中强大而简洁的编程工具——列表推导式。从基础使用到高级技巧,我们将一步步揭示如何利用这个特性来简化代码、提高效率。你将了解到,列表推导式不仅仅是编码的快捷方式,它还能帮助我们以更加Pythonic的方式思考问题。准备好让你的Python代码变得更加优雅和高效了吗?让我们开始吧!
|
2月前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
51 1
|
3月前
|
Python
探索Python中的列表推导式
【10月更文挑战第20天】在编程世界里,时间就是一切。Python的列表推导式是节约时间、简化代码的一大利器。本文将带你深入理解并有效利用这一强大工具,从基础到高级用法,让你的代码更加简洁高效。