Python 数据类型之序列
你知道么, 大部分的列表方法都是修改参数并返回None的,而字符串则刚好相反,字符串方法新建一个字符串,并保留原始的字符串不动。
0. 概述
内涵
详细地说,Python 标准库用 C 实现了丰富的序列(Sequence)类型:
- 容器序列:比如 list、tuple 这些序列能存放不同类型的数据
- 扁平序列:比如 string、byte 这类序列只能容纳一种类型的数据
- 可变序列:比如 list、collections.deque
- 不可变序列:比如 tuple、string
下图展示了可变序列 MutableSequence 和不可变序列 Sequence 的差异和继承关系,理解上述的四种序列类的特性后再处理 Python 风格的序列类型,会更加得心应手。
序列操作
除了可以使用标准数据类型的操作,序列类型操作:
内置函数
1. 列表
列表元素的几种删除方式
列表 删除操作——pop del remove 的区别?
- remove 删除第一个目标值
Docstring:
L.remove(value) -> None -- remove first occurrence of value.
Raises ValueError if the value is not present.
Type: builtin_function_or_method
l = [1, 2, 3, 5, 3]
l.remove(3)
print(l)
[1, 2, 5, 3]
- pop 按照索引删除目标并返回这个被删除的目标的值
Docstring:
L.pop([index]) -> item -- remove and return item at index (default last).
Raises IndexError if list is empty or index is out of range.
Type: builtin_function_or_method
l = [1, 2, 3, 5, 3]
l.pop(2)
3
print(l)
[1, 2, 5, 3]
- del python 32 个关键字之一,用于删除
l = [1, 2, 3, 5, 3]
del l[2]
print('l', l)
除了删除列表的元素,del 还可以删除其它形式的变量(变量引用):
a = 1
b = 2
del b
print('a:', a)
print(b)
a: 1
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-47-88051d048241> in <module>
8 del b
9 print('a:', a)
---> 10 print(b)
NameError: name 'b' is not defined
可以看出,del 删除的并不是数据,而是删除的变量引用
列表的几种“增加”操作
- append:在列表尾部进行添加
Docstring: L.append(object) -> None -- append object to end
Type: builtin_function_or_method
l = [1, 2, 3, 5, 3]
l.append('4')
print(l)
[1, 2, 3, 5, 3, '4']
- insert:通过索引号添加
Docstring: L.insert(index, object) -- insert object before index
Type: builtin_function_or_method
l = [1, 2, 3, 5, 3]
l.insert(3, '4')
print(l)
列表的几种排序方式
- sort 对原列表进行排序(改变)
Docstring: L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
Type: builtin_function_or_method
例子:
l = [1, 2, 3, 5, 3]
l.sort()
print(l)
[1, 2, 3, 3, 5]
- sorted 返回一个排好序的列表(新建)
Signature: sorted(iterable, /, *, key=None, reverse=False)
Docstring:
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
Type: builtin_function_or_method
例子:
l = [1, 2, 3, 5, 3]
lst = sorted(l)
print('l:', l)
print('lst:', lst)
l: [1, 2, 3, 5, 3]
lst: [1, 2, 3, 3, 5]
合并列表的几种方式
- 用 + 直接拼接
lst1 = [1, 2, 3]
lst2 = [3, 5]
lst = lst1 + lst2 # 新建变量 lst
print(lst)
[1, 2, 3, 3, 5]
- 使用切片
lst1[len(lst1):len(lst1)+len(lst2)] = lst2 # 在 原变量 lst1 上进行
print(lst1)
[1, 2, 3, 3, 5]
或者:
lst = []
lst[0:len(lst1)] , lst[len(lst2):len(lst2)] = lst1, lst2 # 新建变量 lst
print(lst)
[1, 2, 3, 3, 5]
- 循环调用 list.append() 拼接
lst = []
for i in lst1:
lst.append(i)
for j in lst2:
lst.append(i)
print(lst)
[1, 2, 3, 3, 5]
- 列表表达式 + for 循环
lst = [j for i in [lst1, lst2] for j in i]
print(lst)
[1, 2, 3, 3, 5]
- 内置 extend() 方法
lst = []
lst.extend(lst1)
lst.extend(lst2)
print(lst)
[1, 2, 3, 3, 5]
或者直接在 lst1 的基础上:
lst1.extend(lst2)
print(lst1)
[1, 2, 3, 3, 5]
列表解析式
2. 元组
3. 字符串
字符串 是不可变类型,不支持“增删改”。
否则会报错:“ TypeError: ‘str’ object does not support item assignment”)
字符串内涵
内建函数
格式化字符串
例子:
s = 'LeetCode'
lst = [i.lower() for i in s]
s = ''.join(l)
print(s)