序列1:基础操作

目录

1. 列表、元组、字符串的共同点  

2. 加号(+)和乘号(*)  

3. “可变”、“不可变” 序列

4. 是(is)和不是(is not)

5. 包含(in)和不包含(not in)

6. del 语句

1. 列表、元组、字符串的共同点  

都可以通过索引获取每一个元素
第一个元素的索引值都是 0
都可以通过切片的方法获得一个范围内的元素的集合
有很多共同的运算符  
因此,列表、元组和字符串,Python 将它们统称为序列。  
根据是否能被修改这一特性,可以将序列分为可变序列和不可变序列:比如列表就是可变序列,而元组和字符串则是不可变序列。

2. 加号(+)和乘号(*)  

首先是加减乘除,只有加号(+)和乘号(*)可以用上,序列之间的加法表示将两个序列进行拼接;乘法表示将序列进行重复,也就是拷贝。
示例:

#序列之间的加法表示将两个序列进行拼接
[1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]
(1,2,3) + (4,5,6)
(1, 2, 3, 4, 5, 6)
'123' + '456'
'123456'

#序列之间的乘法表示将序列进行重复,也就是拷贝
['a','b','c']*3
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
('a','b','c')*3
('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c')
'abc'*3
'abcabcabc'

3. “可变”、“不可变” 序列

虽然可变序列和不可变序列看上去都是 “可变” 的,但实现原理却是天壤之别:可变序列是在原位置修改 “扩容”,而不可变序列则是将内容 “扩容” 后再放到一个新的位置上去。
如下示例中,
列表为可变序列,列表x做自乘后,在原位置“扩容”,id不变;
元组、字符串为不可变序列,元组x和字符串x做自乘后,讲内容“扩容”到新的位置上,id发生变化
#可变序列:列表,修改后id不变。

#可变序列:列表,修改后id不变
x = ['a','b','c']
x
['a', 'b', 'c']
id(x)
1847205330816
x *= 3
x
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
id(x)
1847205330816

#可变序列:元组,修改后id发生变化
x = ('a','b','c')
x
('a', 'b', 'c')
id(x)
1847206323072
x *= 3
x
('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c')
id(x)
1847206544880

#可变序列:字符串,修改后id发生变化
x = 'abc'
x
'abc'
id(x)
1847136740848
x *= 3
x
'abcabcabc'
id(x)
1847205405808

4. 是(is)和不是(is not)

是(is)和不是(is not)被称之为同一性运算符,用于检测两个对象之间的 id 值是否相等。
is、is not 

5. 包含(in)和不包含(not in)

in 运算符是用于判断某个元素是否包含在序列中的,而 not in 则恰恰相反。
列表和元组,需要判断某个元素是否完整的相等于序列或元组中某个元素,结果为是,才判断为True;
字符串,需要判断某个元素是否连续的在字符串中出现,结果为是,才判断为True;
列表和元组,除非包含空字符串元素,否则对空字符串判断都为False;
字符串则不管是否为空,对空字符串直接判定为True。
列表示例:

#列表,需要判断某个元素是否完整的相等于序列或元组中某个元素
x = ['a','b','c']
'a' in x
True
'abc' in x
False
'A' in x
False

x = ['abc']
'a' in x
False

#列表和元组,除非包含空字符串元素,否则对空字符串判断都为False
x = ['abc']
'' in x
False
x = ['abc','']
'' in x
True

元组示例:

#元组,需要判断某个元素是否完整的相等于序列或元组中某个元素
y = ('a', 'b', 'c')
'a' in x
True
'abc' in x
False
'A' in x
False
x = ('abc',)
'a' in x
False

#元组,除非包含空字符串元素,否则对空字符串判断都为False
x = ('abc',)
'' in x
False
x = ('abc','')
'' in x
True

字符串示例:

#字符串,需要判断某个元素是否连续的在字符串中出现
x = 'abc'
'a' in x
True
'abc' in x
True
'A' in x
False
x = 'abcd'
'ac' in x
False

#字符串则不管是否为空,对空字符串直接判定为True。
'' in x
True

6. del 语句

del 语句用于删除一个或多个指定的对象。
del语句可以完整的删除整个序列,也可以单独删除可变序列的部分元素;
del语句可以通过切片删除可变序列的某一段元素,或删除某一段中按间隔跳过的部分元素;切片语法可以类似的实现删段,但不能做间隔删除。

#del语句可以完整的删除整个序列
x1 = 'abcd'
x2 = ['a','b','c','d']
x3 = ('a','b','c','d')
del x1,x2,x3
x1
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'x1' is not defined
x2
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'x2' is not defined
x3
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'x3' is not defined

#del语句可以单独删除可变序列的部分元素
x1 = 'abcd'
x2 = ['a','b','c','d']
x3 = ('a','b','c','d')

del x2[1]
x2
['a', 'c', 'd']

del x1[1]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'str' object doesn't support item deletion
del x3[1]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion

#del语句可以通过切片删除可变序列的某一段元素
x = ['a','b','c','d','e','f','g']
del x[:3]
x
['d', 'e', 'f', 'g']
x = ['a','b','c','d','e','f','g']
del x[3:]
x
['a', 'b', 'c']
x = ['a','b','c','d','e','f','g']
del x[1:5]
x
['a', 'f', 'g']
#切片语法可以类似的实现删段
x = ['a','b','c','d','e','f','g']
x[1:5] = []
x
['a', 'f', 'g']

#del语句可以删除某一段中按间隔跳过的部分元素
x = ['a','b','c','d','e','f','g']
del x[2::2]
x
['a', 'b', 'd', 'f']
#切片语法不能做间隔删除
x = ['a','b','c','d','e','f','g']
x[2::2] = []
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: attempt to assign sequence of size 0 to extended slice of size 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燃烧的火鸟啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值