python——sort函数sorted函数以及lambda函数

文章详细介绍了Python中的sort()和sorted()函数以及lambda表达式的使用,展示了如何对列表进行原地排序、自定义排序规则和创建新的排序列表。同时,讲解了map()和filter()函数的应用,涉及列表操作和条件过滤。
摘要由CSDN通过智能技术生成

排序函数sort

列表的sort()方法可以对列表进行永久的就地排序,即直接修改原列表,会改变原对象的值。并不会去产生一个新的列表。
语法:`list.sort(self,key,reverse)
参数reverse:默认为False。如果reverse=True,则数据将按降序排列。
参数key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

list=[1,2,4,6,7,9,5,8,13,10,14,11,12]
list.sort()
print(list)
#输出结果
[1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
list=[1,2,4,6,7,9,5,8,13,10,14,11,12]
new_list=list.sort()
print(new_list)
#输出
None

在Python中,列表的sort()方法是原地排序,即直接修改原列表,而不返回新的排序后的列表。因此,使用new_list = list.sort()时,list.sort()会对列表进行排序,但不会返回任何值,所以new_list的值为None。

list=[1,3,4,5,6,9,-7,-18]
list.sort(key=lambda x: abs(x))
print(list)

"""abs是python中内置函数,用于返回数值的绝对值"""
print(abs(-12))

#输出;
[1, 3, 4, 5, 6, -7, 9, -18]
12
list=[1,3,4,5,6,9,-7,-18]
list.sort(key=lambda x: (x**3))
print(list)

#[-18, -7, 1, 3, 4, 5, 6, 9]

list.sort(key=lambda x: (x**2)) 是将列表按照每个元素的平方值进行排序,而不是将元素本身变为平方。这意味着在排序时,会用到元素的平方值进行比较,但不会改变元素本身的值。

具体来说,lambda x: (x**2) 是一个匿名函数,它接受一个参数 x 并返回 x 的平方。当列表进行排序时,会根据这个函数的返回值来比较元素,而不是根据元素本身的值来比较。因此,排序后列表中的元素仍然是原来的值,但它们的位置是根据其平方值来排列的。

排序函数sorted

sorted 是 Python 中的一个内置函数,用于对可迭代对象进行排序。它返回一个新的已排序列表,而原始列表保持不变。
sorted 函数可以接受一个可选的 key 参数,它是一个函数,用于指定排序规则。如果不提供 key 参数,则默认按元素的升序排序。
语法:

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

cmp 参数:这是一个可选参数,用于指定自定义的比较函数。这个函数应该接受两个参数并返回一个负整数、零或正整数,表示第一个参数应该位于第二个参数之前、两者相等或第一个参数应该位于第二个参数之后。如果 cmp 参数未指定或为 None,则使用默认比较函数,即通过对象的 < 和 > 运算符进行比较。

key 参数:这是一个可选参数,用于指定一个函数,该函数将被用于从每个元素中提取一个比较键。这个函数应该接受一个参数并返回一个可比较的值。如果 key 参数未指定或为 None,则使用元素的原始值作为比较键。

reverse 参数:这是一个可选参数,用于指定排序的顺序。如果 reverse 参数未指定或为 False,则按升序排序。如果 reverse 参数为 True,则按降序排序。

list=[1,2,3,4,6,5,9,7,8,15,10,12]
new_list=sorted(list)
print(new_list)
new_list+=[20]
print(new_list)
print(list)

#输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20]
[1, 2, 3, 4, 6, 5, 9, 7, 8, 15, 10, 12]

在上述代码中我们可以看出来使用sorted()函数会产生一个新的列表,通过 sorted() 排序,不改变原列表

list=[1,2,3,4,6,5,9,7,8,15,10,12,-11]
new_list=sorted(list,key=lambda x:(x**2))
print(new_list)
#输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, 12, 15]


test = [('b', 6), ('c', 2), ('b', 3), ('d', 9), ('a', 10), ('f', 4), ('b', 5), ('a', 2)]
# 一. 利用参数 key 和 lambda 对函数内的容器元素以下标为 0 的元素进行升序排序
# 若下标为 0 的元素相同则按照原数组的先后顺序排序
result = sorted(test, key=lambda x: x[0])
print('test_1:', result)

# 二. 利用参数 key 和 lambda 对函数内的容器元素以下标为 1 的元素进行升序排序
# 若下标为 1 的元素相同则按照原数组的先后顺序排序
result = sorted(test, key=lambda x: x[1])
print('test_2:', result)

# 三. 利用参数 key 和 lambda 对函数内的容器元素以下标为 1 的元素进行降序排序
# 若下标为 1 的元素相同则按照原数组的先后顺序排序
result = sorted(test, key=lambda x: x[1], reverse=True)
print('test_3:', result)

#结果
test_1: [('a', 10), ('a', 2), ('b', 6), ('b', 3), ('b', 5), ('c', 2), ('d', 9), ('f', 4)]
test_2: [('c', 2), ('a', 2), ('b', 3), ('f', 4), ('b', 5), ('b', 6), ('d', 9), ('a', 10)]
test_3: [('a', 10), ('d', 9), ('b', 6), ('b', 5), ('f', 4), ('b', 3), ('c', 2), ('a', 2)]

lambda函数

Lambda函数是一种匿名函数,也称为lambda函数。它是在Python中定义简短函数的一种简洁方式,不需要使用def关键字定义函数名称。

Lambda函数的语法如下:

lambda arguments: expression

arguments是函数的参数列表,expression是函数的返回值表达式。

Lambda函数可以接受任意数量的参数,但只能有一个表达式,该表达式将计算并返回一个值。如果一个函数的函数体仅有 1 行表达式,则该函数就可以用 lambda 表达式来代替。


```python
num=lambda x:x**2
print(num(5))

add=lambda x,y:x*y
add1=add(5,5)
print(add1)
#结果
25
25

关于上述代码的一般式是:

def num(x):
    return x**2
num1=num(5)
print(num1)

def add(x,y):
    return x*y
print(add(5,5))

map() 是 Python 中的一个内置函数,用于将一个函数应用于一个或多个可迭代对象的所有项目。如果指定了多个可迭代对象,那么 map() 函数会并行地迭代它们,直到最短的输入可迭代对象被耗尽。

map() 函数的基本语法是:

map(function, iterable, ...)

function 是一个函数,用于处理每个输入元素。
iterable 是一个或多个可迭代对象(例如列表、元组等)。
map() 函数返回一个迭代器,该迭代器产生由 function 函数处理每个输入元素后得到的结果。为了得到一个列表或其他数据类型,你通常需要使用 list() 或其他构造函数来转换这个迭代器



# 定义一个函数,用于平方一个数
def square(x):
    return x ** 2


# 一.使用 map() 函数将 square 函数应用于一个列表的所有元素
numbers = [1, 2, 3, 4, 5]
squared = map(square, numbers)

# 将结果转换为列表并打印
print(list(squared))

#你还可以使用 lambda 函数与 map() 结合,以更简洁的方式实现相同的功能:
numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x ** 2, numbers)
print(list(squared))

# 匿名函数写法

# 二. 通过 map() 和 lambda 计算列表各个元素的三次方
result = map(lambda x: x ** 3, [1, 2, 3, 4, 5])
print('test_2:', list(result))

# 三. 提供两个列表,将其相同索引位置的列表元素进行相加
result = list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
print('test_3:', list(result))
# 四. 列表长度不同时,相加后的结果列表长度为较小列表的长度
result = map(lambda x, y: x + y, [1, 3, 5, 7, 9, 11, 13], [2, 4, 6, 8, 10])
print('test_4:', list(result))

result = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10, 12, 14])
print('test_5:', list(result))

#输出
[1, 4, 9, 16, 25]
[1, 4, 9, 16, 25]
test_2: [1, 8, 27, 64, 125]
test_3: [3, 7, 11, 15, 19]
test_4: [3, 7, 11, 15, 19]
test_5: [3, 7, 11, 15, 19]

filter() 是 Python 的内置函数之一,用于过滤序列。它根据指定的条件过滤序列,返回由符合条件元素组成的新列表。

filter() 函数的语法如下:

filter(function, iterable)

function 是一个返回值为布尔值的函数,用于测试序列中的每个元素是否符合条件。
iterable 是一个可迭代对象,例如列表、元组等。
filter() 函数将 function 应用于 iterable 中的每个元素,并返回一个迭代器,该迭代器产生符合条件的元素。为了得到一个列表或其他数据类型,你通常需要使用 list() 或其他构造函数来转换这个迭代器。

# 定义一个函数,用于判断一个数是否为偶数
def is_even(n):
    return n % 2 == 0


# 使用 filter() 函数过滤出列表中的偶数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = filter(is_even, numbers)

# 将结果转换为列表并打印
print(list(even_numbers))  # 输出: [2, 4, 6, 8, 10]
### 回答1: 可以使用 lambda 表达式对列表进行排序,示例如下: ```python my_list = [('apple', 3), ('banana', 2), ('orange', 4), ('pear', 1)] # 使用 lambda 表达式按照第二个元素进行排序 sorted_list = sorted(my_list, key=lambda x: x[1]) print(sorted_list) # 输出:[('pear', 1), ('banana', 2), ('apple', 3), ('orange', 4)] ``` 在上述示例中,我们使用 `sorted()` 函数对列表进行排序,并通过 `key` 参数指定排序的关键字为 `lambda x: x[1]`。这个 lambda 表达式表示按照每个元组的第二个元素进行排序。最后输出排序后的列表 `sorted_list`。 你也可以使用 `reverse` 参数来控制排序的顺序,示例如下: ```python my_list = [('apple', 3), ('banana', 2), ('orange', 4), ('pear', 1)] # 使用 lambda 表达式按照第二个元素进行排序,降序排列 sorted_list = sorted(my_list, key=lambda x: x[1], reverse=True) print(sorted_list) # 输出:[('orange', 4), ('apple', 3), ('banana', 2), ('pear', 1)] ``` 在上述示例中,我们使用 `reverse=True` 参数来控制按照第二个元素进行排序的顺序为降序。最后输出排序后的列表 `sorted_list`。 ### 回答2: sorted()是Python内置的排序函数,可以用来对一个可迭代对象进行排序。而lambda则是一种匿名函数的方式,它可以快速定义一个小的函数。在sorted()函数中使用lambda可以对可迭代对象进行自定义排序。 lambda函数的语法为:lambda 参数列表: 表达式 在sorted()函数中,我们可以通过参数key来传入一个lambda函数,这个lambda函数会作为排序的依据。 例如,我们有一个包含多个元组的列表,每个元组有两个元素,分别是学生的姓名和年龄。我们想按照年龄从小到大对学生进行排序。 students = [('Tom', 21), ('Alice', 19), ('John', 22), ('Kate', 20)] 我们可以使用lambda函数作为key参数来实现排序: sorted_students = sorted(students, key=lambda x: x[1]) lambda x: x[1]定义了一个匿名函数,它的参数是x,表示一个学生的元组。函数体中的x[1]表示取出学生的年龄作为排序的依据。 执行完上面这行代码后,sorted_students将会是一个按照年龄从小到大排序的学生列表: [('Alice', 19), ('Kate', 20), ('Tom', 21), ('John', 22)] 通过使用lambda函数作为sorted()函数的key参数,我们可以根据自己的需求进行复杂的排序操作。 ### 回答3: sorted函数可以用来对一个可迭代对象进行排序,而lambda函数则是一种匿名函数,可以通过简单的表达式来定义函数。当结合使用sortedlambda时,可以根据自定义的排序规则对可迭代对象进行排序。 lambda函数通常用于在排序过程中指定排序的关键字。它可以根据对象的某个特定属性进行排序,或者根据一定的条件来确定排序顺序。 例如,我们有一个包含一些字符串的列表: ``` lst = ['apple', 'banana', 'cherry', 'date'] ``` 如果我们想按字符串长度进行排序,可以使用sortedlambda来完成: ``` sorted_lst = sorted(lst, key=lambda x: len(x)) ``` 上述lambda表达式`lambda x: len(x)`指定了排序的关键字是字符串的长度,它会对lst中的每个字符串x求其长度,并将排序依据这个长度。排序结果为: ``` ['date', 'apple', 'banana', 'cherry'] ``` 同样地,我们也可以使用lambda表达式来指定其他的排序规则,例如按字符串的字母顺序排序: ``` sorted_lst = sorted(lst, key=lambda x: x) ``` 这样就会按照字母顺序对lst中的字符串进行排序,排序结果为: ``` ['apple', 'banana', 'cherry', 'date'] ``` 总而言之,sorted函数lambda函数结合使用可以更灵活地进行排序操作,可以根据特定的需求定义自己的排序规则,使得排序过程更加个性化和定制化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值