推导式与函数
我们在前面五个章节中对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}