推导式与函数

我们在前面五个章节中对Python中的内置数据结构做了详细的介绍,其中包括最基本的操作、函数和内置方法的调用。这些数据结构都有很强大的功能,用以解决相对较复杂的问题。

除了直接创建各种数据类型之外,Python也提供推导式和函数高效地生成高级数据类型。

推导式

推导式Comprehension是一种在Python中用于创建新的数据结构(例如列表、集合、字典等)的简洁方法。推导式可以将循环和条件语句结合起来,以一种简洁、可读性高的方式生成新的数据结构。

Python中有三种类型的推导式:列表推导式List Comprehension、集合推导式Set Comprehension和字典推导式Dictionary Comprehension。每种推导式都有其特定的语法形式,但它们的基本思想都是类似的。

通过推导式可以生成元素个数较多的数据结构对象。

列表推导式(List Comprehension)

列表推导式是用于生成列表的推导式,其语法形式为:

[expression for item in iterable if condition]

其中:

  • expression:对每个 item 计算得到的结果。
  • item:可迭代对象中的每个元素。
  • iterable:可迭代对象,如列表、元组、字符串等。
  • condition(可选):对 item 的筛选条件。

例如,生成一个由 1 到 10 的平方组成的列表:

>>> squares = [x**2 for x in range(1, 11)]
>>> print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

集合推导式(Set Comprehension)

集合推导式用于生成集合,其语法形式为:

{expression for item in iterable if condition}

其中的语法和列表推导式类似,只是使用了大括号 {}

例如,生成一个由 1 到 10 的平方组成的集合:

>>> squares_set = {x**2 for x in range(1, 11)}
>>> print(squares_set)
{1, 4, 9, 16, 25, 36, 49, 64, 81, 100}

字典推导式(Dictionary Comprehension)

字典推导式用于生成字典,其语法形式为:

{key_expression: value_expression for item in iterable if condition}

其中:

  • key_expression:对每个 item 计算得到的键。
  • value_expression:对每个 item 计算得到的值。

例如,生成一个将名字转换为对应长度的字典:

>>> names = ["Alice", "Bob", "Charlie"]
>>> name_lengths = {name: len(name) for name in names}
>>> print(name_lengths)
{'Alice':5, 'Bob':3, 'Charlie':7}

推导式是 Python 中的一个非常强大和常用的特性,能够以简洁、高效的方式生成新的数据结构,提高了代码的可读性和可维护性。

函数

Python提供丰富的内置函数将传入的参数转换并返回各种高级数据类型, 这里我们用到的词语是“转换”而不是”生成”是因为在Python中有生成器对象(Generator),所以为了避免在未来的学习过程中产生歧义,我们在这里只用“转换”一词:

函数名说明
str将参数转换成字符串并返回
list将参数转换成列表并返回
tuple将参数转换成元组并返回
set将参数转换成集合并返回
dict将参数转换成字典并返回

str(object)

object转换成字符串文本并返回, 如果没有传参数则返回空字符串""

这个函数我们并不陌生,在常用内置函数一章中就已经学习过了,它的功能很简单,就是将传入的参数转换成字符串,如:

>>> str(1)
'1'

上面例子中,我们传入的参数只是基本的整型,但是对于更复杂的高级数据类型,它的作用不是将其中的元素进行拼接再转换成字条串,而是在将其所表现的基础上直接加上引号,如str([1,2,3])的结果不是'123', 而是'[1,2,3]'

>>> str([1, 2, 3])
'[1, 2, 3]'

对于str函数的学习还没完结,我们会在后面继续介绍。

list(iterable)

返回将iterable转换之后生成的列表, 如果没有传参数则返回空列表[]

>>> list("abcdefg")
['a','b','c','d','e','f','g']
>>> list(1)
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    list(1)
TypeError: 'int' object is not iterable

>>> list()
[]
>>> list({1:2,3:4,5:6})
[1, 3, 5]

tuple(iterable)

返回将iterable转换之后生成的元组,如果没有传参数则返回空元组()

>>> tuple([1,2,3,4,5,6,7])
(1, 2, 3, 4, 5, 6, 7)
>>> tuple("abcdefg")
('a', 'b', 'c', 'd', 'e', 'f', 'g')
>>> tuple()
()

set(iterable)

返回将iterable转换之后生成的集合,如果没有传参数则返回空集合set()

>>> set([1,2,3,4,5,5,6,1,4])
{1, 2, 3, 4, 5, 6}
>>> set()
set()

dict(**kwargs)

返回一个字典,字典内每个键值对由关键字参数中一对参数名=值组成,无参数则返回一个空字典{}

>>> dict(one=1, two=2, three=3, F=1111)
{'one': 1, 'two': 2, 'three': 3, 'F': 1111}