Python学习第二十天—元组

[复制链接]
15271953841 发表于 2024-2-13 07:40:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 15271953841 于 2024-2-21 06:29 编辑

Python 3.12.1 (tags/v3.12.1:2305ca5, Dec  7 2023, 22:03:25) [MSC v.1937 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
元组也是一个序列,元组既能像列表那样容纳多个对象,也拥有字符串不可变的特性。
有人认为元组是被阉割了的列表。

rhyme=(1,2,3,4,5,"上山打老虎")      (注意这里用的是圆括号(小括号),注意与列表的方括号(中括号)对比学习)
rhyme
(1, 2, 3, 4, 5, '上山打老虎')
rhyme=1,2,3,4,5,"上山打老虎"             (元组可以不打括号,只需要用逗号隔开)
rhyme
(1, 2, 3, 4, 5, '上山打老虎')
rhyme[1]
2
rhyme[0]
1
rhyme[-1]
'上山打老虎'
rhyme[1]=10               (元组是不可变的,试图修改元组的内容是不可取的)
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    rhyme[1]=10
TypeError: 'tuple' object does not support item assignment
rhyme[:3]                 (元组支持切片操作,切片的含义是将目标对象的元素以某中特定的组合导出,不是修改对象本身。)
(1, 2, 3)
rhyme[3:]
(4, 5, '上山打老虎')
rhyme[:]
(1, 2, 3, 4, 5, '上山打老虎')
rhyme[::2]
(1, 3, 5)
rhyme[::-2]
('上山打老虎', 4, 2)    (切片操作后导入一个新的对象)
查——元组支持“查”,不支持“增,删,改”
nums=(3,1,9,6,8,3,5,3)
nums.count(3)
3
heros=("蜘蛛侠","绿巨人","黑寡妇")
heros.index("黑寡妇")
2
s=(1,2,3)
t=(4,5,6)
s+t
(1, 2, 3, 4, 5, 6)
s*3
(1, 2, 3, 1, 2, 3, 1, 2, 3)
元组也可以嵌套,嵌套的方式只需要加个逗号就可以了。
w=s,t
w
((1, 2, 3), (4, 5, 6))
for each in s:
    print(each)

   
1
2
3
for i in w:
    for each in i:
        print(each)

        
1
2
3
4
5
6
S=(1,2,3,4,5)
[each*2 for each in S]            (中(方)括号)
[2, 4, 6, 8, 10]
(each*2 for each in S)            (小(圆)括号)
<generator object <genexpr> at 0x0000011DCE7B3780>(没有元组推导式)
圆括号的必要性?还不如一直都加上为妙!
如何生成只有一个元素的元组?

x=(520)
x
520
type(x)            (type()是检测是什么类型)
<class 'int'>            (int,整数,不是元组)
x=(520,)
x
(520,)
type(x)
<class 'tuple'>         (tuple,是元组的意思,看来加“,“逗号是关键)
打包和解包
打包就是生成一个元组:
t=(123,"FishC",3.14)
t
(123, 'FishC', 3.14)
解包就是把它们一次性赋值给三个或多个变量名的行为,我们称之为解包。
x,y,z=t
x
123
y
'FishC'
z
3.14
这种形式(解包),不仅适用于元组,也适用于任何序列类型,如列表、字符串等
t=[123,"FishC",3.14]
x,y,z=t
x
123
y
'FishC'
z
3.14
a,b,c,d,e="FishC"
a
'F'
b
'i'
c
's'
d
'h'
e
'C'
五个变量分别拿到五个字符,无论哪种解包,注意:赋值号左边的变量必须与右侧的序列元素数量一致,否则报错。
a,b,c="FishC"
Traceback (most recent call last):
  File "<pyshell#60>", line 1, in <module>
    a,b,c="FishC"
ValueError: too many values to unpack (expected 3)
a,b,*c="FishC"
a
'F'
b
'i'
c
['s', 'h', 'C']
除非加一个“*“号,这是一个小技巧,不能对应分配的,把剩下的全部给带”*“号的变量。
a,*b,c="FishC"
a
'F'
b
['i', 's', 'h']
c
'C'
Python有一个引以为傲的技能——多重赋值
x,y=10,20
x
10
y
20
背后的逻辑是,先通过元组打包,再进行解包
_=(10,20)       (单独一个下划线(_),表示一个匿名变量,无关紧要的或临时的)
x,y=_
x
10
y
20
元组真的就固若金汤了吗?
s=[1,2,3]
t=[4,5,6]
w=(s,t)
w
([1, 2, 3], [4, 5, 6])
w[0][0]=0
w
([0, 2, 3], [4, 5, 6])
元组中的元素虽然不可变,但元组中的元素是指向一个可变的列表,那么我们依然可以修改列表中的内容的。
关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鄂ICP备13007585号-4

在本发帖
关注公众号
QQ客服返回顶部