【Python】列表排序,推导式
【Python】列表排序,推导式
一、列表排序
使用sort()函数,语法格式
1 | listname.sort(key=None,reverse=False) |
- reverse是可选参数,默认情况进行升序排序
当reverse = True,则表示为降序排序
- key表示从每个元素中提取用于比较的键
当对字符串排序时,可以设置key参数,默认区分大小写进行排序,当key=str.lower,此时排序不区分大小写
sorted函数
1 | sorted(listname,key=None,reverse=False) |
与sort函数的作用基本相同,不过sorted函数不会改变原列表,而是通过返回值的方式进行排序
二、列表推导式
列表推导式的基本结构如下,外面由方括号 [] 包裹:
1 | [表达式 for 变量 in 可迭代对象 if 条件] |
- 表达式:你要放入新列表中的元素(可以是变量本身,也可以是对变量的计算或方法调用)。
- for 变量 in 可迭代对象:负责遍历原有的数据。
- if 条件:(可选)用于过滤数据的条件,只有满足条件的元素才会被送到前面的“表达式”中处理。
常见用法与示例对比
1. 基础用法(不带条件)
需求:生成一个包含 1 到 5 平方数的列表。
传统
for循环写法:1
2
3squares = []
for i in range(1, 6):
squares.append(i**2)列表推导式写法:
1
2squares = [i**2 for i in range(1, 6)]
print(squares) # 结果: [1, 4, 9, 16, 25]
2. 加入 if 过滤条件
需求:提取 1 到 10 之间的所有偶数。
1 | evens = [x for x in range(1, 11) if x % 2 == 0] |
3. 带有 if-else 的条件赋值
如果你需要根据条件来决定放入什么样的值(满足条件放A,不满足放B),这时候 if-else 需要写在 for 的前面,作为“表达式”的一部分。 需求:遍历 1 到 5,偶数保持原样,奇数替换成字符串 “奇”。
1 | mixed = [x if x % 2 == 0 else "奇" for x in range(1, 6)] |
4. 嵌套循环(多重遍历)
你可以在一个列表推导式中使用多个 for,这相当于多层嵌套循环。 需求:将颜色和尺码进行两两组合。
1 | colors = ["红", "黑"] |
5. 提取对象属性或调用方法
需求:将一个全是小写字符串的列表转换成全大写,并去除两端空格。
1 | words = [" hello ", "world", " python "] |
1.
word.strip():去除首尾空白
strip()方法的作用是去除字符串最左边和最右边的空白字符(包括空格、换行符\n、制表符\t等)。
- 注意:它不会去除字符串中间的空格。
- 示例:如果
word = " hello "(前后都有空格),执行word.strip()后,结果会变成"hello"。2.
.upper():全部转为大写
upper()方法的作用是将字符串中的所有小写英文字母转换成大写。
- 示例:对上一步得到的
"hello"执行.upper(),结果就会变成"HELLO"。
连起来看:执行顺序是从左到右
当写成
word.strip().upper()时,Python 会这样按顺序处理:
- 先拿到
word本身的值(例如" python ")。- 执行
.strip(),把前后的空格“剥”掉,生成一个新的字符串"python"。- 紧接着对这个新鲜出炉的
"python"执行.upper(),把它变成大写,最终得到"PYTHON"。分步写的代码 vs 链式调用:
如果不使用链式调用,代码需要写成两行:
1
2
3 word = " python "
step1 = word.strip() # 此时 step1 是 "python"
result = step1.upper() # 此时 result 是 "PYTHON"而使用链式调用,一行就能搞定,非常简洁:
1
2 word = " python "
result = word.strip().upper() # 一步到位得到 "PYTHON"
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 王总的博客!



