鱼C论坛

 找回密码
 立即注册
查看: 10520|回复: 40

[知识点备忘] 第026讲:元组

[复制链接]
发表于 2020-10-27 04:48:01 | 显示全部楼层 |阅读模式
购买主题 已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-20 11:57:57 | 显示全部楼层
打包和解包蛮有趣的!修改元组内列表的元素值也很讨巧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-5-17 16:19:48 | 显示全部楼层
元组复习:
rhyme = (1,2,3,4,5,"上山打老虎")
>>> rhyme
(1, 2, 3, 4, 5, '上山打老虎')
>>> rhyme = 1,2,3,4,5,"上山打老虎"
>>> rhyme
(1, 2, 3, 4, 5, '上山打老虎')
>>> ryhme[0]
Traceback (most recent call last):
  File "<pyshell#56>", line 1, in <module>
    ryhme[0]
NameError: name 'ryhme' is not defined
>>> rhyme[0]
1
>>> rhyme[-1]
'上山打老虎'
>>> rhyme[1]=10
Traceback (most recent call last):
  File "<pyshell#59>", line 1, in <module>
    rhyme[1]=10
TypeError: 'tuple' object does not support item assignment
>>> rhyme[:3]
(1, 2, 3)
>>> rhyme[:]
(1, 2, 3, 4, 5, '上山打老虎')
>>> rhyme[::2]
(1, 3, 5)
>>> rhyme[::-1]
('上山打老虎', 5, 4, 3, 2, 1)
>>> nums =(3,1,9,6,8,3,5,3)
>>> nums.count(3)
3
>>> heros =("蜘蛛侠","绿巨人","黑寡妇")
SyntaxError: invalid character ',' (U+FF0C)
>>> 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 0x000001944092B660>
>>> x = (520)
>>> type(x)
<class 'int'>
>>> x=(520,)
>>> type(x)
<class '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)
>>> 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#107>", 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']
>>> 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])
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2021-5-19 10:59:51 | 显示全部楼层
**元组**

元组也是一个序列,元组既能像列表那样同时容纳多种类型的对象,也拥有字符串不可变的特性。

从语法上来讲,元组和列表的差别就是列表用的是方括号,而元组用的是圆括号。
列表 - [元素1,元素2,元素3,...]
元组 - (元素1,元素2,元素3,...)

>>> 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[0]
1
>>> rhyme[-1]
'上山打老虎'

因为元组是不可变的,所以试图修改元组内容的行为是不可取的

>>> rhyme[1] = 10
报错

元组也支持切片操作

>>> rhyme[:3]
(1, 2, 3)
>>> rhyme[3:]
(4, 5, '上山打老虎')
>>> rhyme[:]
(1, 2, 3, 4, 5, '上山打老虎')
>>> rhyme[::2]
(1, 3, 5)
>>> rhyme[::-1]
('上山打老虎', 5, 4, 3, 2, 1)

元组只支持“查”,即count和index方法


>>> 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]

生成只有一个元素的元组

>>> x = (520)
>>> x
520
>>> type(x)
<class 'int'>
[这种方法是不对的]

得这样写才行

>>> x = (520,)
>>> x
(520,)
>>> type(x)
<class '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"
[报错]

使用小技巧:加星号

>>> a, b, *c = "FishC"
>>> a
'F'
>>> b
'i'
>>> c
['s', 'h', '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])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2021-7-27 15:08:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-2 10:31:57 | 显示全部楼层
速更下一章
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-13 13:47:04 | 显示全部楼层
打卡026
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-13 14:05:32 | 显示全部楼层
已复习,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 10:42:51 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-14 12:50:39 | 显示全部楼层
原来元祖有这么多可说的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-24 11:53:16 | 显示全部楼层
打卡~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-16 09:56:14 | 显示全部楼层
打卡学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-7 10:20:58 | 显示全部楼层
觉得好难啊啊啊 啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-18 14:06:59 | 显示全部楼层
每天学习,我就是在进步。
为什么要将元组设计成不可变的序列呢?虽然知道了元组的定义和语法,但是还是想快一点知道具体应用呀。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-24 18:24:29 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-15 01:10:12 | 显示全部楼层
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-4 22:07:05 | 显示全部楼层
打卡
>>> a=1,2,3,4,5,'ctx'
>>> a
(1, 2, 3, 4, 5, 'ctx')
>>> a[0]
1
>>> a[-1]
'ctx'
>>> a[:]
(1, 2, 3, 4, 5, 'ctx')
>>> a[2:]
(3, 4, 5, 'ctx')
>>> a[:3]
(1, 2, 3)
>>> a[::3]
(1, 4)
>>> a[::-1]
('ctx', 5, 4, 3, 2, 1)
>>> n=3,1,6,7,7,9,7,0,3,4
>>> n
(3, 1, 6, 7, 7, 9, 7, 0, 3, 4)
>>> n.count(3)
2
>>> n.count(7)
3
>>> n.index(7)
3
>>> n.index(6)
2
>>> n.index(9)
5
>>> b=a,n
>>> b
((1, 2, 3, 4, 5, 'ctx'), (3, 1, 6, 7, 7, 9, 7, 0, 3, 4))
>>> for each in n:
        print(each)

       
3
1
6
7
7
9
7
0
3
4
>>> for i in b:
        for each in i:
                print(each)

               
1
2
3
4
5
ctx
3
1
6
7
7
9
7
0
3
4
>>> [each *2 for each in b]
[(1, 2, 3, 4, 5, 'ctx', 1, 2, 3, 4, 5, 'ctx'), (3, 1, 6, 7, 7, 9, 7, 0, 3, 4, 3, 1, 6, 7, 7, 9, 7, 0, 3, 4)]
>>> [each *2 for each in a]
[2, 4, 6, 8, 10, 'ctxctx']
>>> [each *2 for each in n]
[6, 2, 12, 14, 14, 18, 14, 0, 6, 8]
>>>  x=(1,)

SyntaxError: unexpected indent
>>> x=(1,)
>>> x
(1,)
>>> type(x)
<class 'tuple'>
>>> t=a,b,n
>>> t
((1, 2, 3, 4, 5, 'ctx'), ((1, 2, 3, 4, 5, 'ctx'), (3, 1, 6, 7, 7, 9, 7, 0, 3, 4)), (3, 1, 6, 7, 7, 9, 7, 0, 3, 4))
>>> a,b,n=t
>>> a
(1, 2, 3, 4, 5, 'ctx')
>>> b
((1, 2, 3, 4, 5, 'ctx'), (3, 1, 6, 7, 7, 9, 7, 0, 3, 4))
>>> n
(3, 1, 6, 7, 7, 9, 7, 0, 3, 4)
>>> a,b,c,d,e="ctx"
Traceback (most recent call last):
  File "<pyshell#273>", line 1, in <module>
    a,b,c,d,e="ctx"
ValueError: not enough values to unpack (expected 5, got 3)
>>> a,b,c="ctx"
>>> a
'c'
>>> b
't'
>>> c
'x'
>>> "ctx"=a,b,c
SyntaxError: cannot assign to literal
>>> [1,2,3,4,5]=t
SyntaxError: cannot assign to literal
>>> y=[1,2,3,4,5]
>>> z,x,c,v,m=y
>>> z
1
>>> x
2
>>> c
3
>>> v
4
>>> m
5
>>> a,*b='ctx'
>>> a
'c'
>>> b
['t', 'x']
>>>
>>> q=([1,3,6],[2,5,7])
>>> q[2][2]=8
Traceback (most recent call last):
  File "<pyshell#292>", line 1, in <module>
    q[2][2]=8
IndexError: tuple index out of range
>>> q
([1, 3, 6], [2, 5, 7])
>>> q[2][2]
Traceback (most recent call last):
  File "<pyshell#294>", line 1, in <module>
    q[2][2]
IndexError: tuple index out of range
>>> q[1][1]
5
>>> q[1][2]
7
>>> q[1][2]=11111
>>> q
([1, 3, 6], [2, 5, 11111])
>>> z,y=12,45
>>> z
12
>>> y
45
>>> _=(12,45)
>>> z,y=_
>>> z
12
>>> y
45
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-10 10:40:28 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-21 11:24:17 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-7 20:59:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 02:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表