- 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]