python如何生成列表和元组数据_在python中元组与列表的区别及序列解包

原标题:在python中元组与列表的区别及序列解包

一、 元组与列表的区别

元组中的数据一旦定义就不允许更改。

元组没有append()、extend()和insert()等方法,无法向元组中添加元素。

元组没有remove()或pop()方法,也无法对元组元素进行del操作,不能从元组中删除元素。

从效果上看,tuple()冻结列表,而list()融化元组。

元组的速度比列表更快。如果定义了一系列常量值,而所需做的仅是对它进行遍历,那么一般使用元组而不用列表。

元组对不需要改变的数据进行“写保护”将使得代码更加安全。

元组可用作字典键(特别是包含字符串、数值和其它元组这样的不可变数据的元组)。列表永远不能当做字典键使用,因为列表不是不可变的。

序列解包

可以使用序列解包功能对多个变量同时赋值:

x, y, z = 1, 2, 3

>>> print(x, y, z)

1 2 3

可以对range对象进行序列解包:

x, y, z = range(3)

>>> print(x, y, z)

0 1 2

使用迭代器对象进行序列解包

x, y, z = iter([1, 2, 3])

使用可迭代的map对象进行序列解包

x, y, z = map(str, range(3))

>>> print(x, y, z)

0 1 2

交换两个变量的值

a, b = b, a

sorted()函数返回排序后的列表

x, y, z = sorted([1, 3, 2])

字符串也支持序列解包

a, b, c = 'ABC'

序列解包对于列表和字典同样有效

s = {'a':1, 'b':2, 'c':3}

b, c, d = s.items()

>>> b

('a', 1)

#使用字典时不用太多考虑元素的顺序

b, c, d = s

>>> b

'a'

b, c, d = s.values()

>>> print(b, c, d)

1 2 3

生成器推导式

生成器推导式的结果是一个生成器对象。使用生成器对象的元素时,可以根据需要将其转化为列表或元组,也可以使用生成器对象__next__()方法或内置函数next()进行遍历,或者直接将其作为迭代器对象来使用。

生成器对象具有惰性求值的特点,只在需要时生成新元素,比列表推导式具有更高的效率,空间占用非常少,尤其适合大数据处理的场合。

不管用哪种方法访问生成器对象,都无法再次访问已访问过的元素。

g = ((i+2)**2 for i in range(10))

>>> g

at 0x0000011B65812570>

a_tuple = tuple(g)

>>> a_tuple

(4, 9, 16, 25, 36, 49, 64, 81, 100, 121)

g = ((i+2)**2 for i in range(10))

aList = list(g)

>>> aList

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

#使用生成器对象__next__()方法或内置函数next()进行遍历

g = ((i+2)**2 for i in range(10))

#使用生成器对象的__next__()方法获取元素

>>> g.__next__()

4

>>> g.__next__()

9

>>> next(g)

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值