资讯专栏INFORMATION COLUMN

Python 进阶之路 (三) Tuple元组使用指南

1fe1se / 2618人阅读

摘要:返回元组中元素最大值。将列表转换为元组。如果相对元组排序,通常先得将它转换为列表并使其成为一个可变对象,才能获得使用排序方法,或使用内置方法。

比List更安全的数据类型

大家好,今天为大家介绍一种更为安全的Python内置数据类型:tuple(元组),以及它的基础用法

元组是什么

元组(tuple)是另一种有序的数据类型,与list比较类似。主要不同的一点是tuple被创建后就不能对其进行修改。所以,tuple与list不同,没有append(),pop(),insert()这些方法可以使用。获取元素的方法和list是一样的,可以通过索引来访问(也是从0开始的),只不过不能赋值成为其他的元素。

因为 tuple不可变,所以代码更安全。如果可以的话,我们尽量使用tuple代替list。

创建元组
# 定义一个空的tuple
t = ()
print(t)
Out:()

只有1个元素的元组在进行定义的时候,需要加一个逗号 , 来消除歧义,否则定义的就不是一个元组而是元素本身

t1 = (5)
t2 = (5, )
print(t1)
print(t2)

Out: 5
    (5,)
tup4 = (1, 2, 3, 4, 5 );          # 创建时直接赋值
tup5 = "a", "b", "c", "d";        # 创建时直接赋值
print(tup4)
print(tup5)

Out:(1, 2, 3, 4, 5)
     ("a", "b", "c", "d")

一旦创建完,比如tup4 和 tup5 这两个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和List是一样的,我们可以正常地使用tup4[0],tup5[-1],但不能赋值成另外的元素

访问元组

访问元组和List基本一样,我们可以用切片很容易的查看元组中的元素,这里不多说,看个小栗子:

tup4 = (1, 2, 3, 4, 5 );
tup5 = "a", "b", "c", "d";
print(tup4[0])
print(tup5[1:3])
print(tup5[::-1])
print(sorted(tup5,reverse=True))   # 使用sorted结果变成了List

Out: 1
    ("b", "c")
    ("d", "c", "b", "a")
    ["d", "c", "b", "a"]
理解元组的不可变

上面已经说过了,元组是不可变的,让我们来看下面这个小栗子:

    test=("a","b",[1,2,3])
    print(test)
    test[2][0]=100
    print(test)

Out: ("a", "b", [1, 2, 3])
     ("a", "b", [100, 2, 3])

不知道有没有朋友会有疑问? 你不是说元组不能变嘛,这里怎么回事,test元组的第三个元素是List,这里我们修改了List的值结果不是变了吗?

这里要给大家说明一下,tuple不可变指的是指向不变,也就是说test[2]永远指向List[1,2,3],这里是因为List可变,所以我们才能修改为[100,2,3],但是改变前后test[2]的指向没有发生任何变化,如果我们想要直接改变test[2]的值,就会发现如下错误

test[2]=[100,2,3]
Out: TypeError: "tuple" object does not support item assignment

理解了“指向不变”后,如果我们需要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。

元组的连接

如前面所说,元组是不可改的,但是可以连接,我们可以使用 + 对元组进行连接:

t1 = (2,3,5)
t2 = ("ricequant","python")
t3 = t1 + t2
print(t3)
Out:(2, 3, 5, "ricequant", "python")
元组的删除

元组中的元素不能被删除,但是我们可以使用 del 删除整个元组,删除后可以重新定义,非常简单,不多说啦

person = ("xiaobai",18,"paris")
print(person)
del person
print(person)

Out: ("xiaobai", 18, "paris")
     NameError: name "person" is not defined
元组的解包
这里是比较有意思的地方,假设我们有一个元组t如下:
t = ("foo", "bar", "baz", "qux")

当我们创建 t 时,实际上就是一个打包,过程展示如下图:

那如果是解包呢? 换过来就行了呀

t = ("foo", "bar", "baz", "qux")
(s1, s2, s3, s4) = t
print(s1,s2,s3,s4)

Out:foo bar baz qux

当我们执行(s1, s2, s3, s4) = t的时候,实际发生的情况如下:

这里注意一点,如果我们尝试解包一个元祖是传递的变量和元组实际元素数量不相符时会产生错误:

(s1, s2, s3) = t
ValueError: too many values to unpack (expected 3)

(s1, s2, s3, s4, s5) = t
ValueError: not enough values to unpack (expected 5, got 4)
元组的互换swap

其实Python里面还有一种非常简单的创建元组的方法,那就是逗号,我们如果用逗号分隔一些元素,会自动生成一个元组:

a = "foo"
b = "bar"
x= a, b
print(x)

Out:("foo", "bar")

如果做一个简单的互换很容易,只要这样就可以了:

x= b,a
print(x)
Out:("bar", "foo")
元组的常用方法汇总

tup.index(x, [start, [stop]])) 返回元组中start到stop索引中第一个值为 x的元素在整个列表中的索引。如果没有匹配的元素就会返回一个错误。

tup.count(x) 返回 x 在元组中出现的次数。

cmp(tuple1, tuple2) 比较元组中两个元素。

len(tuple) 计算元组元素个数。

max(tuple) 返回元组中元素最大值。

min(tuple) 返回元组中元素最小值。

tuple(seq) 将列表转换为元组。

元组不提供字符串、列表和字典中的方法。如果相对元组排序,通常先得将它转换为列表并使其成为一个可变对象,才能获得使用排序方法,或使用sorted内置方法。

总结

今天为大家讲解了我知道的有关tuple的一切,也为大家展示了一些常规操作,希望能够帮助到大家,马上就要到初五了,迎财神,吃饺子!!! 希望大家在2019大吉大利,大发横财!!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43150.html

相关文章

  • Python 进阶之路 (七) 隐藏的神奇宝藏:探秘Collections

    摘要:它需要一个函数默认工厂作为其参数。默认情况下设置为,即如果键不存在则为,并返回并显示默认值。因此,它是一个无序集合,其中元素及其各自的计数存储为字典。这相当于其他语言的或。使用,我们不必使用整数索引来访问元组的成员。 神奇的collections 大家好,今天想和大家分享一个Python里面非常棒的模快:Collections 该模块实现了专门的容器数据类型,为Python的通用内置容...

    rickchen 评论0 收藏0
  • Python 进阶之路 (五) map, filter, reduce, zip 一网打尽

    摘要:另外,这些中的每一个都是纯函数,有返回值。例如,如果要计算整数列表的累积乘,或者求和等等基础语法参数是连续作用于每一个元素的方法,新的参数为上一次执行的结果,为被过滤的可迭代序列返回值最终的返回结果在中,是一个内置函数。 简洁的内置函数 大家好,我又回来了,今天我想和大家分享的是Python非常重要的几个内置函数:map,filter,reduce, zip。它们都是处理序列的便捷函数...

    ccj659 评论0 收藏0
  • Python 进阶之路 (十一) 再立Flag, 社区最全的itertools深度解析(下)

    摘要:将每一行作为返回,其中是每行中的列名。对于每一行,都会生成一个对象,其中包含和列中的值。它返回一个迭代器,是迭代结果都为的情况。深度解析至此全剧终。 简单实战 大家好,我又来了,在经过之前两篇文章的介绍后相信大家对itertools的一些常见的好用的方法有了一个大致的了解,我自己在学完之后仿照别人的例子进行了真实场景下的模拟练习,今天和大家一起分享,有很多部分还可以优化,希望有更好主意...

    tomorrowwu 评论0 收藏0
  • Python 进阶之路 (一) List 进阶方法汇总,新年快乐!

    摘要:尝射于家圃,有卖油翁释担而立,睨之,久而不去。康肃问曰汝亦知射乎吾射不亦精乎翁曰无他,但手熟尔。康肃忿然曰尔安敢轻吾射翁曰以我酌油知之。 开启变身模式 大家好, 从这一期开始,我们会从小白变身为中等小白,在基础起步阶段有太多的东西我没有讲到,但是俗话说的好,无他,但手熟尔,只要多多练习,时间会是最好的证明,相信我们终有一天会成为高手,因此从这一系列开始,让我们一起更上一层楼,还是和往常...

    garfileo 评论0 收藏0
  • Python学习之路3-操作列表

    摘要:本章内容主要是对列表的进一步操作,以及初识元组数据结构。列表非常适合用于存储在程序运行期间可能变化的数据集,列表可以被修改。代码结果相比于列表,元组是更简单的数据结构。 《Python编程:从入门到实践》笔记。本章内容主要是对列表的进一步操作,以及初识元组数据结构。 1. 遍历列表 本章主要是for循环: # 代码: magicians = [alice, david, carolin...

    makeFoxPlay 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<