Python之元组

元组 tuple

元组是不可改变的序列,同 list 一样,元组可以存放任意类型的元素,一但元组生成,则它不可以改变。

tuplelist 不同,没有 append(), pop(), insert() 这些方法可以使用。获取元素的方法和 list 是一样的,可以通过索引来访问(也是从0开始的),只不过不能赋值成为其他的元素。

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

创建元组

用小括号 () 括起来,单个元素括起来用逗号 (,) 区分是单个对象还是元组

注意:

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

# 定义一个空的tuple
t = ()

# 创建只有1个元素的元组
t1 = (1)   # t1 = 1
t2 = (1,)  # t2 = (5,)
t3 = 1,    # t3 = (1,)
type(t1)   # <class 'int'>
type(t2)   # <class 'tuple'>
type(t3)   # <class 'tuple'>

# 创建包含多个元素的元组
t4 = (1,2,3)
t5 = 100, 200, 300
t6 = 'a','b','c','d'
t7 = 'a','b','c','d',100,200

删除元组

元组中的元素不能被删除,但是我们可以使用 del 删除整个元组,删除后可以重新定义

访问元组

规则与列表完全相同,但由于元组是不可变对象,所以不支持索引赋值切片赋值

  • 索引取值

  • 切片取值

      tup1 = (1, 2, 3, 4, 5 )
      tup2 = "a", "b", "c", "d"
      print(tup1[0])       # 2
      print(tup2[1:3])     # (b,c)
      print(tup2[::-1])    # ('d','c','b','a')
    

元组的构造函数 tuple()

  • tuple() 生成一个空的元组,等同于 ()

  • tuple(iterable) 用可迭代对象生成一个元组

      t1 = tuple()
      t2 = tuple(range(10))
      t3 = tuple('hello')
      t4 = tuple([1,2,3,4])
    

元组的算术运算

与列表完全相同

元组的比较运算符

与列表完全相同

in/not in

规则与列表完全相同

序列函数

规则与列表完全相同

len, max, min, sum, all, any

注意点

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

说明:
tuple 不可变指的是指向不变,也就是说 test[2] 永远指向 List[1,2,3],这里是因为 List 可变,所以我们才能修改为 [100,2,3] ,但是改变前后test[2] 的指向没有发生任何变化

元组的解包

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

(s1, s2, s3) = t # 报错

注意点:解包一个元祖是传递的变量和元组实际元素数量不相符时会产生错误

元组的常用方法

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

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

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

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

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

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

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

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

tup = (1,2,3,4,5,6,7,9,10)
tup1 = tup.index(5)     # 4
tup2 = tup.index(5,1,5) # 4
tup3 = tup.index(5,5,7) # 报错

res = tup.count(5)      # 1
res1 = tup.count(11)    # 0

tup4 = tuple(list('123'))  # '1','2',''3
tup5 = tuple('ABCD')       # 'A','B','C','D'

其他函数

  • reversed(seq) 返回反向顺序的可迭代对象

  • sorted(iterable, reverse=False) 返回一个新的已排序列表

    • reverse = False 表示按从小到大排列,默认值

    • reverse = True 表示按从大到小排列

注意:对元组使用 sorted 方法后返回列表类型

for x in reversed("ABCD"):
  print(x)                  # D C B A

L = [8, 6, 3, 5, 7]
L2 = sorted(L)
print(L2)  # [3, 5, 6, 7, 8]
L3 = sorted(L, reversed=True)
print(L3)  # [8, 7, 6, 5, 3]
print(L)  # 保持不变
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容