元组可以看做轻量级的列表,属于不可变序列,元组的形式与列表类似,但定义时所有元素是放在一对圆括号“()”中,而不是方括号中。和列表不同,元组中的数据一旦定义就无法通过任何方式更改,所以,元组中没有remove(),append()等添加元素的方法,是无法像元组中添加元素的。而且,元组也没有remove()和pop方法,也不能对元组元素使用del操作,不能从元组中删除某个元素,只能用del命令删去整个元组。元组虽然也支撑切片炒作,但是也只限于通过切片来访问元组中的元素,并不支持切片修改元组中的元素的值,也不能为元组增加和删除元素。
元组的速度比列表更快。如果定义了一系列常量值,而所需做的仅是对它进行遍历,那么一般使用元组而不用列表。而且因为元组不支持修改元素,所以可以不用额外写保护代码,从而使代码更加安全。
元组的创建,是使用“=”将一个元组赋值给变量,就可以创建一个元组变量。
a_tuple = ('a', 'b', 'mpilgrim', 'z', 'example')
x = ()
需要注意的是创建只有一个元素的元组时,只把元素放在括号里是不行的,还需要在元素后面加一个逗号。
也可以使用tuple()函数将列表,字符串,字典对象等其他类型可以迭代对象转化为元组。
tuple('abcdefg')
('a', 'b', 'c', 'd', 'e', 'f', 'g')
s=tuple()
元组的删除,因为元组属于不可变序列,只能用del命令删去整个元组对象,不能只删除元组中的部分元素。
序列解包是在实际开发中非常重要和常用的一个用法,可以大幅度提高了代码的可读性,并且减少了出现员的代码输入量。可以对多个变量同时进行赋值:
x, y, z = 1, 2, 3
v_tuple = (False, 3.5, 'exp')
(x, y, z) = v_tuple
x, y, z = v_tuple
序列解包不仅可以用于元组,也可以用于列表和字典。
在对字典操作时,不需要对元素的顺序考虑过多
s = {'a':1, 'b':2, 'c':3}
b, c, d = s.items()
b
('c', 3)
使用序列解包可以同时遍历多个序列
keys = ['a', 'b', 'c', 'd']
values = [1, 2, 3, 4]
for k, v in zip(keys, values):
print((k, v), end=' ')
生成器代表式与列表推导式非常接近,只是生成器代表式使用括号而不是列表推导式所使用的方括号。生成器对象具有惰性求值的特点,只在需要时生成新元素,比列表推导式具有更高的效率,空间占用非常少,尤其适合大数据处理的场合。
与列表推导式本质上不同的是,生成器推导式的结果是一个生成器对象。使用生成器对象的元素时,可以根据需要将其转化为列表或元组,也可以使用生成器对象next()或__next__()方法进行遍历,或者直接将其作为迭代器对象来使用。但是生成器对象中的每个元素只能使用一次,并且只能从前往后顺序访问。
g = ((i+2)**2 for i in range(10))
g
<generator object <genexpr> at 0x0000000003095200>
tuple(g)
不管用哪种方法访问生成器对象,都无法再次访问已访问过的元素
元组是Python中的不可变序列,类似轻量级列表,但速度更快。不可通过添加、删除元素的方法修改,适用于常量集合。创建元组时,单元素需加逗号。可通过`tuple()`函数将其他类型转换为元组。元组删除只能用`del`删除整个元组。序列解包提升代码可读性,适用于元组、列表和字典。生成器表达式提供惰性求值,适合大数据处理,元素只能按顺序访问一次。
1285

被折叠的 条评论
为什么被折叠?



