目录
元组
-
定义
元组既能像列表那样同时容纳多种类型的对象,也拥有字符串不可变的特性。
-
元组和列表的区别
①.列表是使用方括号,元组则是圆括号(也可以不带圆括号)
②.列表中的元素可以被修改,而元组不行
③.列表中涉及到修改元素的方法元组均不支持
④.列表的推导式叫列表推导式,元组的 “推导式” 叫生成器表达式
⑤.都支持切片操作、通过下标获取元素、支持 count() 方法和 index() 方法、支持拼接(+)和 重复(*)运算符、支持嵌套、支持迭代
##当元组中只有一个元素是要在后面加','
>>> x = (123)
>>> type(x)
<class 'int'>
>>> x = 520,
>>> type(x)
<class 'tuple'>
>>>
>>> x = (520,)
>>> type(x)
<class 'tuple'>
>>>
##生成一个元组我们有时候也称之为元组的打包;将它们一次性赋值给三个变量名的行为,我们称之为解包;
>>> x = (123,'abc',1.23)
>>> a,b,c = x
>>> a
123
>>> b
'abc'
>>> c
1.23
>>>
##元组中的元素虽然是不可变的,但如果元组中的元素是指向一个可变的列表,那么我们依然是可以修改列表中的内容的;
>>> x = [1,2,3]
>>> y = [4,5,6]
>>> z = (x,y)
>>> z
([1, 2, 3], [4, 5, 6])
>>> z[0][0] = 0
>>> z
([0, 2, 3], [4, 5, 6])
>>>
序列
-
定义
列表、元组和字符串的共同点统称为序列。
- 都可以通过索引获取每一个元素
- 第一个元素的索引值都是 0
- 都可以通过切片的方法获得一个范围内的元素的集合
- 有很多共同的运算符
-
运算
分为可变序列和不可变序列;
id():返回指定对象的唯一标识符;
同一性运算符:是(is)和不是(is not)被称之为同一性运算符,用于检测两个对象之间的 id 值是否相等:
包含性运算符:in 运算符是用于判断某个元素是否包含在序列中的,而 not in 则恰恰相反;
del 语句用于删除一个或多个指定的对象;
##可变序列是在原位置修改 “扩容”,而不可变序列则是将内容 “扩容” 后再放到一个新的位置上去
>>> x = [1,2,3] ————>可变序列
>>> id(x)
49943304
>>> x *= 2
>>> x
[1, 2, 3, 1, 2, 3]
>>> id(x)
49943304
>>>
>>> y = (1,2,3) ————>不可变序列
>>> id(y)
53431400
>>> y *= 2
>>> y
(1, 2, 3, 1, 2, 3)
>>> id(y)
53450760
>>>
-
方法
①.list()、tuple() 和 str() 这三个 BIF 函数主要是实现列表、元组和字符串的转换;
②.min() 和 max() 这两个函数的功能是:对比传入的参数,并返回最小值和最大值;
③.sum() 函数用于计算迭代对象中各项的和;
④.len() 函数返回可迭代对象的长度/个数;(32位平台最大值:2^31-1,64位平台最大 值:2^63-1);
⑤.sorted() 函数将重新排序 iterable 参数中的元素,并将结果返回一个新的列表,sorted() 函数也支持 key 和 reverse 两个参数,用法跟列表的 sort() 方法一致;
sort() ——>只能应用在列表排序上并改变原列表,sorted()——>可用在所有可迭代对 象排序上,并创建新列表;
⑥.reversed()函数 它返回的结果是一个迭代器,并且我们可以把它当可迭代对象处理,它同 样支持任何形式的可迭代对象;
>>> x = [1,2,0,3,4]
>>> sorted(x)
[0, 1, 2, 3, 4]
>>> sorted(x,reverse=True)
[4, 3, 2, 1, 0]
>>> x = ['Ox','Cat','Bear','Horse',' Monkey']
>>> sorted(x,key=len)
['Ox', 'Cat', 'Bear', 'Horse', ' Monkey']
>>>
##reversed————>翻转
>>> x = [1,2,0,3,4]
>>> list(reversed(x))
[4, 3, 0, 2, 1]
>>>
>>> list(reversed(range(0,10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>>
all() 函数是判断可迭代对象中是否所有元素的值都为真;
any() 函数则是判断可迭代对象中是否存在某个元素的值为真;
>>> x = [1,2,0]
>>> all(x)
False
>>> any(y)
True
enumerate() 函数用于返回一个枚举对象,它的功能就是将可迭代对象中的每个元素及从 0 开始的序号共同构成一个二元组的列表;
>>> seasons = ["Spring", "Summer", "Fall", "Winter"]
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>>
##它有一个 start 参数,可以自定义序号开始的值
>>> list(enumerate(seasons,start=10))
[(10, 'Spring'), (11, 'Summer'), (12, 'Fall'), (13, 'Winter')]
>>>
zip() 函数用于创建一个聚合多个可迭代对象的迭代器。做法是将作为参数传入的每个可迭代对象的每个元素依次组合成元组,即第 i 个元组包含来自每个参数的第 i 个元素。
##如果传入的可迭代对象长度不一致,那么将会以最短的那个为准
>>> x = [1,2,3]
>>> y = [4,5]
>>> zipped = zip(x,y)
>>> list(zipped)
[(1, 4), (2, 5)]
>>>
##如果多余值对于我们来说是有意义的,我们可以使用 itertools 模块的 zip_longest() 函数来代替
>>> import itertools
>>> zipped = itertools.zip_longest(x,y)
>>> list(zipped)
[(1, 4), (2, 5), (3, None)]
>>>
map() 函数会根据提供的函数对指定的可迭代对象的每个元素进行运算,并将返回运算结果的迭代器;
>>> mapped = map(ord,'Hello')
>>> list(mapped)
[72, 101, 108, 108, 111]
>>> mapped = map(pow,[1,2],[3,4])
>>> list(mapped)
[1, 16]
>>>
filter()与 map() 函数类似,filter() 函数也是需要传入一个函数作为参数,不过 filter() 函数是根据提供的函数,对指定的可迭代对象的每个元素进行运算,并将运算结果为真的元素,以迭代器的形式返回:
##判断是否为大写,有则返回True
>>> list(filter(str.isupper,'Hello'))
['H']
>>>
##鉴真
>>> list(filter(bool,[True,False,1,0]))
[True, 1]
-
可迭代对象和迭代器
最大的区别是:可迭代对象咱们可以对其进行重复的操作,而迭代器则是一次性的;
iter()函数:将可迭代对象转换为迭代器;
next()函数:它是专门针对迭代器的。它的作用就是逐个将迭代器中的元素提取出来;
>>> x = [1,2,3,4,5]
>>> y = iter(x)
>>> type(x)
<class 'list'>
>>> type(y)
<class 'list_iterator'>
>>>
>>> next(y)
1
>>> next(y)
2
>>> next(y)
3
>>> next(y)
4
>>> next(y)
5
>>> next(y)
Traceback (most recent call last):
File "<pyshell#375>", line 1, in <module>
next(y)
StopIteration
>>>
##如果不想它抛出异常,那么可以给它传入第二个参数
>>> z = iter(x)
>>> next(z,'没了')
1
>>> next(z,'没了')
2
>>> next(z,'没了')
3
>>> next(z,'没了')
4
>>> next(z,'没了')
5
>>> next(z,'没了')
'没了'
>>> next(z,'没了')
'没了'
>>> next(z,'没了')
'没了'
>>>