【python】tuple(6)

参考 Python从零开始系列连载,by 王大伟 Python爱好者社区

参考 Hellobi Live | 1小时破冰入门Python

参考 《简明python教程》

参考 《小甲鱼零基础入门学python》

Note: 更多连载请查看【python】



上了枷锁的列表一诺千金, 不可改变
这里写图片描述

元组是Python的另一种特色的数据类型,元组和列表是相似的,可以存储不同类型的数据。但是!划重点:元组是不可改变的创建后就不能做任何修改操作了

下面是列表的一些常用的方法,圈出来部分是元组可以使用的
这里写图片描述

1 元组的创建

Enchanter:元组和列表最大的区别是什么?
Bryant:废话,当然是[]和()

其实不是,元组最大的特点是**,**(逗号)

1)创建一个元组的时候,必须加逗号,不然会认为是整型

tuple1 = 1,#特殊情况:创建一个元素的元组时必须加逗号
print (tuple1)
print (type(tuple1))

tuple2 = (1,)
print (tuple2)
print (type(tuple2))

tuple3 = (1)
print (tuple3)
print (type(tuple3))

output

(1,)
<class 'tuple'>
(1,)
<class 'tuple'>
1
<class 'int'>

2)创建元组,用逗号隔开的就是元组,但是为了美观和代码可读性,我们一般加小括号

a = 1,2,3 #创建元组,用逗号隔开的就是元组,但是为了美观和代码可读性,我们一般加小括号
print (a)
type(a)

output

(1, 2, 3)
tuple

3)元组支持嵌套

tuple1 = ('a',1,2.33,[1,'a'],(1,3,5),{'a':1})
type(tuple1) #注意:上面的元组包含了列表,所以元组允许嵌套

output

('a', 1, 2.33, [1, 'a'], (1, 3, 5), {'a': 1})
tuple

4)创建空元组

tuple1 = ()#创建空元组
tuple1

output

()

我们在创建元组的时候,其实是在进行元组打包

tuple1 = 1,2,3,4 #我们在创建元组的时候,其实是在进行元组打包
a,b,c,d = tuple1 #元组解包,将等号右侧的元组中的元素按顺序依次赋值给等号左边的变量
print(a,b,c,d)

output

1 2 3 4

要写完整左边的,一 一对应好,否者报错

a,b,c = tuple1 #要写完整左边的,一 一对应好

结果报错

ValueError: too many values to unpack (expected 3)

2 元组的索引

同列表

tuple1 = (0,1,2,3,4,5,6,7,8)
print (tuple1[3]) #索引
print (tuple1[-2]) #索引

output

3
7

3 元组的切片

同列表

tuple1 = (0,1,2,3,4,5,6,7,8)
print (tuple1[1:3])  #切片
print (tuple1[5:3:-1]) #切片

output

(1, 2)
(5, 4)

4 元组的连接

可以结合切片和连接,对元组进行所谓的添加和删除

同列表

tuple1 = (0,1,2)
tuple2 = (3,4,5) 
print (tuple1 + tuple2) #连接

output

(0, 1, 2, 3, 4, 5)

5 元组的复制

同列表

tuple1 = (0,1,2)
tuple1*3 #复制

output

(0, 1, 2, 0, 1, 2, 0, 1, 2)

6 元组对内部元素的循环

同列表

tuple1 = (0,1,2)
for i in tuple1: #对内部元素循环
    print(i)

output

0
1
2

7 查找元组的元素

同列表

tuple1 = (0,1,2)
print (2 in tuple1) #查找元组中是否有某元素
print (3 in tuple1)

output

True
False

8 元组的删除

同列表

tuple1 = (0,1,2,3,4,5,6,7,8,9,10)
del tuple1 #删除元组
tuple1

output

NameError: name 'tuple1' is not defined

9 元组的最大值、最小值

同列表

tuple1 = (0,1,2,3,4,5,6,7,8,9,10)
print (max(tuple1))
print (min(tuple1))

output

10
0

10 元组的长度

同列表

tuple1 = (0,1,2,3,4,5,6,7,8,9,10)
len(tuple1)#查看元组长度

output

11

空元素的元组长度为0

len(())#对空元组执行长度操作,显示长度为0

结果为0


11 元组的元素的不变性

列表中的
• pop()
• append()
• extend()
• remove()
• index()
在元组中都不可用

tuple1 = (1,2,3)
tuple1[0] = 2 #元组元素不能修改

结果报错

TypeError: 'tuple' object does not support item assignment

12 元组与列表之间的转换

list()和tuple()
这里写图片描述


13 元组与for…in的结合

[(m,n) for m in 'abcd' for n in'abcd']

结果为

[('a', 'a'),
 ('a', 'b'),
 ('a', 'c'),
 ('a', 'd'),
 ('b', 'a'),
 ('b', 'b'),
 ('b', 'c'),
 ('b', 'd'),
 ('c', 'a'),
 ('c', 'b'),
 ('c', 'c'),
 ('c', 'd'),
 ('d', 'a'),
 ('d', 'b'),
 ('d', 'c'),
 ('d', 'd')]

如果要删去相同的元素,可以在最后加一个约束条件

[(m,n) for m in 'abcd' for n in'abcd' if m != n] #如果字符串里有重复的字符,而我们要找不同的字符的排列组合,加条件判断!

结果为

[('a', 'b'),
 ('a', 'c'),
 ('a', 'd'),
 ('b', 'a'),
 ('b', 'c'),
 ('b', 'd'),
 ('c', 'a'),
 ('c', 'b'),
 ('c', 'd'),
 ('d', 'a'),
 ('d', 'b'),
 ('d', 'c')]

下面看看一般的方法

#一般方法
list1 = []
for i in 'abcd':
    for j in 'abcd':
        if i != j:
            list1.append((i,j))   
list1

结果同上


那么问题来了

Enchanter:元组操作方法比列表少?为啥还要学这个!感觉没啥优势!

Bryant:元组在某些方面有优势的:

  • 元组的运算速度比列表快,如果你经常要遍历一个序列,且不需要修改内容,用元组比列表好
  • 元组相当于给数据加了保护(不可修改),有些场合需要这种不可修改的内容,想想我们生活中的很多通知说明等 pdf 文件不就是只读不可写么,能理解了吧。

Enchanter:震惊!元组在这种情况下竟然能将劣势转为优势

14 元组有像列表一样的推导式吗?

把列表推导式中的 [] 换成 () 试试

tuple1 = (i**2 for i in range(10))
type(tuple1)

结果为

generator

是生成器,amazing

访问一下下

for j in range (10):
    print (tuple1.__next__())

结果像挤牙膏一样,一点一点出来

0
1
4
9
16
25
36
49
64
81

Note: 更多连载请查看【python】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值