购买主题
打包和解包蛮有趣的!修改元组内列表的元素值也很讨巧!
元组复习:
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
Traceback (most recent call last):
File "<pyshell#56>", line 1, in <module>
ryhme
NameError: name 'ryhme' is not defined
>>> rhyme
1
>>> rhyme[-1]
'上山打老虎'
>>> rhyme=10
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
rhyme=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)
<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 =
>>> 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=
>>> t=
>>> w =(s,t)
>>> w
(, )
>>> w =0
>>> w
(, )
>>>
**元组**
元组也是一个序列,元组既能像列表那样同时容纳多种类型的对象,也拥有字符串不可变的特性。
从语法上来讲,元组和列表的差别就是列表用的是方括号,而元组用的是圆括号。
列表 - [元素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
1
>>> rhyme[-1]
'上山打老虎'
因为元组是不可变的,所以试图修改元组内容的行为是不可取的
>>> rhyme = 10
报错
元组也支持切片操作
>>> rhyme[:3]
(1, 2, 3)
>>> rhyme
(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)
>>>
生成只有一个元素的元组
>>> 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 =
>>> 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 =
>>> t =
>>> w = (s, t)
>>> w
(, )
>>> w = 0
>>> w
(, )
{:10_265:}
速更下一章
打卡026
已复习,谢谢
学习
原来元祖有这么多可说的{:10_297:}
打卡~~{:10_254:}{:10_254:}
打卡学习
觉得好难啊啊啊 啊
每天学习,我就是在进步。
为什么要将元组设计成不可变的序列呢?虽然知道了元组的定义和语法,但是还是想快一点知道具体应用呀。
打卡
谢谢
打卡
>>> a=1,2,3,4,5,'ctx'
>>> a
(1, 2, 3, 4, 5, 'ctx')
>>> a
1
>>> a[-1]
'ctx'
>>> a[:]
(1, 2, 3, 4, 5, 'ctx')
>>> a
(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
>>>
[(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)]
>>>
>>>
>>>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
>>> =t
SyntaxError: cannot assign to literal
>>> y=
>>> 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=(,)
>>> q=8
Traceback (most recent call last):
File "<pyshell#292>", line 1, in <module>
q=8
IndexError: tuple index out of range
>>> q
(, )
>>> q
Traceback (most recent call last):
File "<pyshell#294>", line 1, in <module>
q
IndexError: tuple index out of range
>>> q
5
>>> q
7
>>> q=11111
>>> q
(, )
>>> z,y=12,45
>>> z
12
>>> y
45
>>> _=(12,45)
>>> z,y=_
>>> z
12
>>> y
45
打卡
{:5_109:}
{:10_243:}
已有 25 人购买 本主题需向作者支付 5 鱼币 才能浏览