python问题笔记2

70 列表嵌套元组,分别按字母和数字排序

您可以使用Python中的sorted()函数来对列表中的元组进行排序。首先,您需要定义一个自定义的排序函数,以便根据字母或数字进行排序。

以下是一个例子,展示如何按字母和数字分别对嵌套元组进行排序:

def sort_by_letter(item):
    return item[0]

def sort_by_number(item):
    return item[1]

# 列表嵌套元组
data = [('b', 2), ('a', 1), ('c', 3), ('d', 4)]

# 按字母排序
sorted_by_letter = sorted(data, key=sort_by_letter)
print("按字母排序结果:", sorted_by_letter)

# 按数字排序
sorted_by_number = sorted(data, key=sort_by_number)
print("按数字排序结果:", sorted_by_number)

该代码将输出:

按字母排序结果: [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
按数字排序结果: [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

key参数是一个可选的参数,它用于指定排序的规则。默认情况下,如果列表中的元素是可比较的,sorted方法会根据元素的自然顺序进行排序。但是,如果列表中的元素是复杂的对象,并且你想按照特定属性进行排序,你可以使用key参数传入一个函数来指定排序的规则。在这个例子中,我们定义了两个函数sort_by_letter和sort_by_number作为key参数传递给sorted方法,以便按字母或数字进行排序。

lambda

Python 中的 lambda 是一个用于创建匿名函数的关键字。匿名函数是没有明确命名的小型且通常只使用一次的函数。lambda 函数可以有任意数量的参数,但只能有一个表达式。这种函数的主要用途是用于需要函数对象的地方,而又不想使用标准的函数定义方法。这使得代码更加简洁。

lambda 的基本语法:

lambda arguments: expression

这里,arguments 是传递给函数的参数列表,而 expression 是一个关于这些参数的表达式,其结果就是这个函数的返回值。

lambda 的用途包括:

  1. 排序操作中的 key 函数:就像您之前的例子中使用自定义函数作为 sorted 方法的 key 参数一样,lambda 可以简化这个过程。例如,sorted(data, key=lambda x: x[0]) 可以替代 sort_by_letter 函数。

71 列表嵌套列表排序,年龄数字相同怎么办?

以下是一个例子,展示如何按照年龄数字和姓名对嵌套列表进行排序:

def sort_by_age(item):
    return item[1]

def sort_by_name(item):
    return item[0]

# 列表嵌套列表
data = [['Alice', 25], ['Bob', 30], ['Charlie', 25], ['David', 30]]

# 按年龄排序,年龄相同按姓名排序
sorted_data = sorted(data, key=lambda x: (sort_by_age(x), sort_by_name(x)))
print("排序结果:", sorted_data)

该代码将输出:

排序结果: [['Alice', 25], ['Charlie', 25], ['Bob', 30], ['David', 30]]

在这个例子中,我们定义了两个自定义的排序函数sort_by_age()sort_by_name(),分别用于指定按年龄和姓名进行排序。在sorted()函数中,我们使用了lambda函数作为key参数,通过(sort_by_age(x), sort_by_name(x))来指定先按年龄排序,然后按姓名排序。这样,当年龄数字相同时,会根据姓名进行排序。

通过在lambda函数中添加更多的排序条件,您可以根据自己的需求对嵌套列表进行灵活的排序。

72 根据键对字典排序(方法一,zip函数)

要根据字典的键对其进行排序,可以使用zip()函数将字典的键和值分别打包为元组,并对这些元组进行排序。然后,您可以使用dict()函数将排序后的元组列表转换回字典形式。

以下是一个使用zip()函数对字典键进行排序的示例:

data = {
   'b': 2, 'a': 1, 'c': 3, 'd': 4}

sorted_data = dict(sorted(zip(data.keys(), data.values())))

print("排序后的字典:", sorted_data)

输出结果为:

排序后的字典: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

zip(data.keys(), data.values()) 会产生一个迭代器,其中包含以下元组:
(‘b’, 2), (‘a’, 1), (‘c’, 3), (‘d’, 4)
字典的键和值配对形成的元组将根据元组中的第一个元素(即字典的键)进行排序
如果在排序元组时元组中的第一个元素(通常是键)相同,那么 sorted 函数会继续比较元组中的下一个元素来决定排序顺序。在标准的元组比较中,比较是逐元素进行的,直到找到第一个不相同的元素。如果所有元素都相同,则这些元组被认为是相等的。

在这个例子中,我们使用zip()函数将字典data的键和值打包成元组列表。然后,我们使用sorted()函数对这些元组进行排序,并最终使用dict()函数将排序后的元组列表转换回字典形式。

请注意,这种方法只能按照键的顺序进行排序,不会改变字典中键对应的值的位置。

73 根据键对字典排序(方法二,不用zip)

要根据字典的键对其进行排序而不使用zip()函数,可以使用sorted()函数的items()方法,并指定一个自定义的排序函数。

以下是一个使用sorted()函数的items()方法对字典键进行排序的示例:

data = {
   'b': 2, 'a': 1, 'c': 3, 'd': 4}

sorted_data = dict(sorted(data.items(), key=lambda x: x[0]))

print("排序后的字典:", sorted_data)

输出结果为:

排序后的字典: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

data.items()返回一个包含字典键值对的列表,每个元素是一个元组,形式为(key, value)。sorted(data.items(), key=lambda x: x[0])表示对这个列表按照元组的第一个元素(即字典的键)进行排序。dict()函数将排序后的列表转换回字典。

这种方法与使用zip()函数的方法相比更简洁,但仍能实现根据键对字典进行排序。

74 列表推导式、字典推导式、生成器

当您需要创建一个新的列表、字典或生成器时,可以使用推导式(comprehension)来简洁地实现。下面我会分别给出列表推导式、字典推导式和生成器的示例。

  1. 列表推导式(List Comprehension):用于创建新的列表。
# 创建一个包含1到10的平方数的列表
squares = [x**2 for x in range(1, 11)]
print(squares)

输出结果为:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

在上述示例中,我们使用列表推导式创建了一个包含从1到10的平方数的列表。推导式的语法是将表达式 x**2 放在一个方括号内,并使用 for 循环迭代变量 x 的范围。

  1. 字典推导式(Dictionary Comprehension):用于创建新的字典。
# 创建一个包含1到5的数字及其平方的字典
squares_dict = {
   x: x**2 for x in range(1, 6)}
print(squares_dict)

输出结果为:

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

在上述示例中,我们使用字典推导式创建了一个包含从1到5的数字及其平方的字典。推导式的语法是将键值对表达式 x: x**2 放在花括号内,并使用 for 循环迭代变量 x 的范围。

  1. 生成器(Generator):用于按需生成值的迭代器。
# 创建一个生成器,按需生成1到10的平方数
squares_gen = (x**2 for x in range(1, 11))

# 打印生成器中的值
for num in squares_gen:
    print(num)

输出结果为:

1
4
9
16
25
36
49
64
81
100

在上述示例中,我们使用生成器创建了一个按需生成从1到10的平方数的迭代器。生成器的语法与列表推导式类似,但使用圆括号而不是方括号。然后,我们通过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值