- reversed() 反转
- reversed() 的语法
- 反转字符串、列表、元组
- sorted() 自定义排序
- sorted() 语法
- 使用示例
- 1. 基本排序:默认升序排列
- 2. 基本排序:降序排列
- 3. 自定义排序:使用 `key` 参数
- 4. 自定义排序:按某种规则进行排序
- 5. 排序字典:根据字典的键
- 6. 排序字典:根据字典的值
- `sorted()` vs `list.sort()`
reversed() 反转
reversed()
用来返回一个 反向迭代器,该迭代器可以遍历输入对象的元素,但 从后往前遍历。
需要注意的是,reversed()
并 不会直接修改原对象,它返回的是一个迭代器,你可以将它 转换成列表、元组或字符串等其他类型。
使用场景:当需要反向遍历某个序列,但不想创建一个新的反转列表时,reversed()
会非常有用。
reversed() 的语法
reversed(sequence)
- 参数:
sequence
是一个可以 支持反向迭代的序列(如字符串、列表、元组等)。 - 返回值:返回一个 反向迭代器。
反转字符串、列表、元组
- 反转字符串:
s = "hello"
reversed_s = reversed(s)
print(''.join(reversed_s)) # 输出: "olleh"
Python 的 reversed()
函数返回一个反向迭代器,可以用 ''.join()
来将其转换回字符串。
Python 的切片操作是反转字符串最常见和高效的方法之一。通过 [::-1]
可以轻松反转一个字符串。
def reverse_string(s: str) -> str:return s[::-1]# 示例
s = "hello"
print(reverse_string(s)) # 输出: "olleh"
- 反转列表:
lst = [1, 2, 3, 4]
reversed_lst = reversed(lst)
print(list(reversed_lst)) # 输出: [4, 3, 2, 1]
- 反转元组:
t = (1, 2, 3, 4)
reversed_t = reversed(t)
print(tuple(reversed_t)) # 输出: (4, 3, 2, 1)
reversed()
返回的是一个反向迭代器,而不是一个直接反转的序列。如果想得到一个新的列表或字符串,需要将其转换。reversed()
不能直接用于像整数、字典等不可反向迭代的对象。
sorted() 自定义排序
sorted()
用于对任何可迭代对象进行排序,并返回一个新的排序后的列表。它不会修改原始对象,而是生成一个新的排序后的列表。可以用来排序列表、元组、字符串,甚至是字典中的键等。
sorted() 语法
sorted(iterable, *, key=None, reverse=False)
参数说明:
- iterable(必需):想要排序的可迭代对象。可以是列表、元组、字典的键、字符串等。
- key(可选):一个函数,用来在排序过程中进行自定义排序。该函数接受一个元素作为输入,并返回一个值,排序时将 基于返回值来进行排序。
- reverse(可选):一个布尔值,默认值是
False
。如果为True
,则按降序排列;如果为False
,则按升序排列。 - 返回值:返回一个新的列表,包含已排序的元素,原始的可迭代对象保持不变。
使用示例
1. 基本排序:默认升序排列
numbers = [5, 3, 9, 1, 4]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # [1, 3, 4, 5, 9]
2. 基本排序:降序排列
numbers = [5, 3, 9, 1, 4]
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc) # [9, 5, 4, 3, 1]
3. 自定义排序:使用 key
参数
key=len
表示按 每个字符串的长度 进行排序。
words = ["apple", "banana", "grape", "kiwi"]
sorted_words = sorted(words, key=len)
print(sorted_words) # ['kiwi', 'apple', 'grape', 'banana']
4. 自定义排序:按某种规则进行排序
如果想根据复杂的规则进行排序,可以传递一个自定义的排序函数:
lambda x: x[-1]
表示按照 每个字符串的最后一个字母 进行排序。
# 按照字符串的字母顺序排序,但以最后一个字母为排序依据
words = ["apple", "banana", "grape", "kiwi"]
sorted_words = sorted(words, key=lambda x: x[-1])
print(sorted_words) # ['banana', 'kiwi', 'apple', 'grape']
5. 排序字典:根据字典的键
对于字典,如果希望按键排序,可以传入字典的键。
dictionary = {"apple": 4, "banana": 1, "cherry": 2, "date": 3}
sorted_keys = sorted(dictionary)
print(sorted_keys) # ['apple', 'banana', 'cherry', 'date']
这里 sorted(dictionary)
默认**按字典的键(即字符串)**升序排序。
6. 排序字典:根据字典的值
如果希望按字典的值排序,可以使用 key
来指定排序的依据。
dictionary = {"apple": 4, "banana": 1, "cherry": 2, "date": 3}
sorted_by_value = sorted(dictionary, key=lambda x: dictionary[x])
print(sorted_by_value) # ['banana', 'cherry', 'date', 'apple']
这里用 lambda x: dictionary[x]
来 按字典的值 进行排序。
sorted()
vs list.sort()
sorted()
:返回一个新的排序后的列表,原始列表不变。list.sort()
:直接在原列表上进行排序,返回值是None
,即原地排序。
例如:
# 使用 sorted()(不会改变原列表)
numbers = [5, 3, 9, 1, 4]
sorted_numbers = sorted(numbers)
print(numbers) # 原列表不变 [5, 3, 9, 1, 4]
print(sorted_numbers) # 返回新的排序后的列表 [1, 3, 4, 5, 9]# 使用 list.sort()(会改变原列表)
numbers = [5, 3, 9, 1, 4]
numbers.sort()
print(numbers) # 原列表已经改变,排序后的列表 [1, 3, 4, 5, 9]