python元组简介

  初学者经常会将元组(tuple)和列表(list)混淆,他们的形式看起来也有些接近,只是tuple用圆括号,而list使用方括号。

>>> t = (1, 1)
>>> l = [1, 1]
>>> type(t)
<type 'tuple'>
>>> type(l)
<type 'list'>

初始化

# 空元祖
>>> ()
()
#常规初始化
>>> (1, 2)
(1, 2)
#不用括号,直接逗号连接,也表示元组
>>> 1, 2
(1, 2)

  这里需要注意的是单个元素元组的初始化,如果一个包含元素为数字1的元组,如果直接使用(1)来初始化,这种表示方法是错误的,python解析器会认为这是一个数字1。

>>> a = (1)
>>> type(a)
<type 'int'>

  要表示单个元素的元组,只需要在元素后加上一个逗号即可,加不加括号都没关系。

>>> a = 1,
>>> type(a)
<type 'tuple'>

>>> b = ("s",)
>>> type(b)
<type 'tuple'>

常用操作

元组遍历

  使用for语句进行元组遍历。

t = (5, 4, 3, 2, 1)
for i in t:
    print i

元组分片

  元组的分片还是元组。

>>> t = (5, 4, 3, 2, 1)
>>> t[0:1]
(5,)

元组相加

  元组相加只能元组之间相加,其实就是在前一个元组后直接append另外的元组(这种解释是否正确?至少看结果是正确的,“不可变性”章节会细讲)。

>>> a = 1, 
>>> b = 2,
>>> a + b
(1, 2)

元组比较

  元组之间的比较,是将元组之间的元素逐一比较,有点类似于字符串的比较。如有tuple1何tuple2两个元组比较,其实是分别比较tuple1[index]和tuple2[index],index从0一直增加,直到比较结果不为相等,或者index到了某个元组的长度大小。

>>> a = (1, 2)
>>> b = (1, 2)
>>> a == b
True
>>> b = (1, 3)
>>> a < b
True
>>> b = (1, 2, 3)
>>> a < b
True

不可变性

  元组的不可变性是指元组在初始化后,其值就不会再改变。那么,在“元组相加”章节的情况如何解释呢?a += b这样的操作,其实是新创建了一个元组,该元组的值就是a和b元组的所有数据,再讲该新元组赋值给a。也就是说,相加之前和之后的a元组是两个不同的对象。代码为证:

>>> a = 1,
>>> b = 2,
>>> id(a)
139943685752464
>>> a += b
>>> a
(1, 2)
>>> id(a)
139943685608800

  如上代码,虽然,都是元组a,却完全是两个不同的对象。这点,和字符串也是非常相似。

与其他类型的相互转换

与字符串转换

>>> a = 1, 2
>>> s = str(a)
>>> s
'(1, 2)'
>>> tuple(s)
('(', '1', ',', ' ', '2', ')')
>>> tuple(eval(s))
(1, 2)

  元组转字符串,直接使用str函数即可。但是,该字符串想再转回元组,而不能直接使用tuple函数,因为tuple函数的形参是一个列表list。所以上述代码中tuple(s),其实是先将s转成了列表,所以就会出现上面的问题。要想实现这样的转化,需要在字符串前加上eval函数

与列表转换

  直接使用tuple函数和list函数即可。

>>> tuple([1, 2])
(1, 2)
>>> list((1, 2))
[1, 2]

元组的用处

不可变性
可以作为dict的键值
可以作为函数的返回值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值