一文弄懂Python中的sort和sorted函数

1. 引言

Python中的 sort()sorted()函数主要用于按升序或降序对数据进行排序。在本文中比较用于列表时,两个函数在编程和语法上的差异。

闲话少说,我们直接开始吧!

2. Sort()函数基本用法

用于列表排序的sort函数的语法如下:

list.sort(reverse=False, key=None)

用法如下:

  • 参数reverse:默认为False。如果reverse=True,则数据将按降序排列。
  • 参数key: 默认为None。我们可以指定一个用户定义的函数来自定义排序。

2.1 样例一之基本排序

我们首先尝试使用上述默认参数来看个事例,样例代码如下:

# Original List
typ_data = ['$', '45', '3j+5', 'Hello']
print(f'Original Data: {typ_data}')

# Sorting the list
typ_data.sort()
# Printing sorted list
print(f'Sorted Data: {typ_data}')

----------
Original Data: ['$', '45', '3j+5', 'Hello']
Sorted Data: ['$', '3j+5', '45', 'Hello']

可以知道上述结果按照字符串首字符的ASCII码进行升序排序。

2.2 样例二之用户自定义排序函数

有时间我们需要按照用户自定义的函数来对列表进行排序,相应的代码示例如下:

# List containing dictionary data
data = [
    {'fruit': 'strawberry', 'price': 100},
    {'fruit': 'banana', 'price': 91},
    {'fruit': 'mango', 'price': 132},
    {'fruit': 'cherry', 'price': 82},
]

print(f'Original Data: {data}')

# Function for sorting by key 'price'
def sort_dict_by_price(item):
    return item['price']

# Sorting data using the user-defined sorting function
data.sort(key=sort_dict_by_price)
print('-'*20)
# Printing the data
print(f'Sorted Data: {data}')

运行结果如下:

Original Data: [{'fruit': 'strawberry', 'price': 100}, {'fruit': 'banana', 'price': 91}, {'fruit': 'mango', 'price': 132}, {'fruit': 'cherry', 'price': 82}]
--------------------
Sorted Data: [{'fruit': 'cherry', 'price': 82}, {'fruit': 'banana', 'price': 91}, {'fruit': 'strawberry', 'price': 100}, {'fruit': 'mango', 'price': 132}]

上述代码中,我们通过编写一个名为sort_dict_by_price的函数,它接受我们的字典本身作为输入,并返回键“price”的值。将此函数已传递给函数sort的参数key,该参数将根据价格按升序对数据进行排序。

3. Sorted()函数基本用法

用于列表排序的sorted函数的语法如下:

sorted(iterable, key=None, reverse=False)

用法如下:

  • 参数iterable: 必需。输入任何可迭代数据
  • 参数key: 默认为“None”。指定排序条件。
  • 参数reverse: 默认为False。当设置为True时,数据将按降序排列。

3.1 样例一之基本排序

Python中的sorted()函数用于对可迭代数据进行排序。默认情况下,此函数按升序对数据进行排序。

我们当然也可以使用sorted函数来对各种类型的数据进行排序,样例代码如下:

list_data = [43, 21, 2, 34]
print(f'Sorted List: {sorted(list_data)}')

# Seperator
print('-'*20)

tuple_data = (('x', 3), ('w', 1), ('1', 4))
print(f'Sorted Tuple: {sorted(tuple_data)}')

# Seperator
print('-'*20)

dict_data = {9: 'G', 1: 'V', 4: 'E'}
print(f'Sorted Dictionary Keys: {sorted(dict_data)}')
print(f'Sorted Dictionary Values: {sorted(dict_data.values())}')
print(f'Sorted Dictionary Items: {sorted(dict_data.items())}')

结果如下:

Sorted List: [2, 21, 34, 43]
--------------------
Sorted Tuple: [('1', 4), ('w', 1), ('x', 3)]
--------------------
Sorted Dictionary Keys: [1, 4, 9]
Sorted Dictionary Values: ['E', 'G', 'V']
Sorted Dictionary Items: [(1, 'V'), (4, 'E'), (9, 'G')]

3.2 样例二之用户自定义排序函数

我们同样也可以通过将自定义排序函数传递给函数sorted()来实现相应的排序功能,举例如下:

# Tuple data
tuple_data = (
    ('Mango', 25),
    ('Walnut', 65),
    ('Cherry', 10),
    ('Apple', 68),
)

print(f'Original: {tuple_data}')
# Separator
print('-'*20)

# Function for grabbing 2nd item from the data
def sorting_tup_data(item):
    return item[1]

# Sorting based on sorting criteria in descending order
sorting = sorted(tuple_data, key=sorting_tup_data, reverse=True)
print(f'Sorted: {sorting}')

结果如下:

Original: (('Mango', 25), ('Walnut', 65), ('Cherry', 10), ('Apple', 68))
--------------------
Sorted: [('Apple', 68), ('Walnut', 65), ('Mango', 25), ('Cherry', 10)]

上述代码中,由于在传递自定义函数时使用了参数key,因此元组是根据第二项进行排序的;同样由于我们将参数reverse设置为True,此时输出的数据是按降序排序输出的。

4. 总结

我们已经看到了用于列表中的sort()sorted()函数的对比,同样我们给出了相应的代码示例,进而了解这些函数是如何工作的。简而言之,这两个函数都用于对数据进行排序,但函数sort()只对Python列表进行排序,而sorted()函数用于对可迭代数据进行排序。

对以上进行总结如下:

一文弄懂Python中的sort和sorted函数_第1张图片

你可能感兴趣的:(Python,python)