目录
2.3.3.删除(pop、remove、del、clear)
一、容器类型
字符串也是容器类型,只是一旦定义就不可变
程序设计的基本结构:
如:用户密码验证时,如果一个程序需要能验证100,1000,基于更多用户时,我们会需要一个储存东西的容器。这些存储大量数据的容器,在Python中称之为内置数据结构
二、列表(list)
底层原理是链表+数组
2.1.什么是列表?
>>> list('123')
['1', '2', '3']
>>> list(123)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> list(range(3))
[0, 1, 2]
2.2列表的三个特性:
1.有序的项目集合
可以通过下标取值、切片
>>> lst[4]
'y'
>>> lst[2]
0.5
>>> lst[::1]
['a', 1, 0.5, None, 'y']
>>> lst[::-1]
['y', None, 0.5, 1, 'a']
# 下标越界
>>> lst[6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
# 当start在end前,得到的值为空
>>> lst[-4:4:-1]
[]
2.可以存放任何类型对象
# 可以放函数
>>> lst
['a', 1, 0.5, None, 'yxx', <built-in function print>]
# 可以放列表
>>> lst = ["a", 1, 0.5, None, "yxx", print, [1,2]]
>>> lst
['a', 1, 0.5, None, 'yxx', <built-in function print>, [1, 2]]
3.可变数据类型
可变和不可变 主要看在原来的内存地址上能不能修改值
>>> str1 = 'abc'
>>> str1[1] = 'c'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> lst = ["a", 1, 0.5, None, "yxx", print, [1,2]]
>>> lst[1]
1
>>> id(lst)
140001343797832
>>> lst[1]=2
>>> lst
['a', 2, 0.5, None, 'yxx', <built-in function print>, [1, 2]]
>>> id(lst)
140001343797832
2.3列表的基本操作
2.3.1增加(append、insert、extend)
1.append
每一次只能追加一个元素,追加好的元素放在最末尾
>>> lst
['a', 2, 0.5, None, 'yxx', <built-in function print>, [1, 2]]
>>> lst.append("sanchuang")
>>> lst
['a', 2, 0.5, None, 'yxx', <built-in function print>, [1, 2], 'sanchuang']
2.insert
在指定下标位置增加元素
>>> lst = ['a', 'x']
>>> lst
['a', 'x']
>>> lst.insert(1, 'yy')
>>> lst
['a', 'yy', 'x']
3.extend
只能接收可迭代对象,把可迭代对象里的每一个值分别放入列表的最后
可迭代对象:可以用for循环获取
>>> lst
['a', 'yy', 'x']
>>>
>>> lst.extend("qwer")
>>> lst
['a', 'yy', 'x', 'q', 'w', 'e', 'r']
2.3.2列表可以进行加法和乘法
加法:把列表的元素拼接起来
乘法:把列表里的元素重复多少次
>>> lst1 = [1, 2]
>>> lst2 = [2, 3]
>>> lst1 + lst2
[1, 2, 2, 3]
>>> lst1 * lst2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'list'
>>> lst1 * 3
[1, 2, 1, 2, 1, 2]
2.3.3.删除(pop、remove、del、clear)
1.pop
可以指定下标,lst.pop(2)删除下标为2的元素
lst.pop() 默认删除最后一个元素
并且会把删除的元素作为返回值返回
>>> lst = ["a", "b", "c"]
>>> lst.pop()
'c'
>>> lst
['a', 'b']
>>> remove_item = lst.pop()
>>> remove_item
'b'
>>> lst.extend("xy")
>>> lst
['a', 'x', 'y']
>>> lst.pop(2)
'y'
>>> lst
['a', 'x']
2.remove
指定元素删除,删掉找到的第一个,找不到会报错
>>> lst = ["s", "b"]
>>> lst
['s', 'b']
>>> lst.remove("s")
>>> lst
['b']
3.del
指定关键字删除
只要通过下标 或 切片能切出来,就都可用del删除
>>> lst
['u', 'x']
>>>
KeyboardInterrupt
>>> del lst[1]
>>> lst
['u']
>>> lst = ["a", "b","c"]
>>> del lst[1:2]
>>> lst
['a', 'c']
4.clear
清空列表
>>> lst
['u', 'x', 'x', 'x', 'x', 'x']
>>> lst.clear()
>>> lst
[]
2.3.4.修改
>>> lst = ["xx", "y", 1, "u", 3]
>>> lst
['xx', 'y', 1, 'u', 3]
1.在指定下标插入
下标修改,可以接受任意值
>>> lst[3] = "t"
>>> lst
['xx', 'y', 1, 't', 3]
2.可以通过切片插入
切片修改,必须要赋值一个可迭代对象
(1)当切片出来的列表不为空的时候,则替换查找出来的list元素
>>> lst[1:4] = "ab"
>>> lst
['xx', 'a', 'b', 1, 't', 3]
# 切片修改,必须要赋值一个可迭代对象
>>> lst[4:2] = 12
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable
(2)当切片出的列表为空时,就在 start 的位置开始插入相应的值
>>> lst[1:1]
[]
>>> lst[1:1] = "qw"
>>> lst
['xx', 'q', 'w', 'y', 1, 't', 3]
>>> lst[4:2] = "rrr"
>>> lst
['xx', 'a', 'b', 1, 'r', 'r', 'r', 't', 3]
2.3.5.列表反转(负切片、reverse)
1.负切片
不改变列表本身,只是生成了一个新的链表
>>> lst
['xx', 'a', 'b', 1, 'r', 'r', 'r', 't', 3]
>>> lst[::-1]
[3, 't', 'r', 'r', 'r', 1, 'b', 'a', 'xx']
>>> lst
['xx', 'a', 'b', 1, 'r', 'r', 'r', 't', 3]
2.reverse
直接改变列表本身
>>> lst.reverse()
>>> lst
[3, 't', 'r', 'r', 'r', 1, 'b', 'a', 'xx']
2.3.6.排序(sort)
要保证列表中的数据类型一致
- 默认是降序(正序)
升序: sort(reverse=True)
>>> lst = [6, 2, 3, 7, 5]
>>> lst.sort()
>>> lst
[2, 3, 5, 6, 7]
>>> lst.sort(reverse=True)
>>> lst
[7, 6, 5, 3, 2]
- 字符串排序:按照ASCII编码排序
先判断两个字符串第一个字符的ASCII编码的大小,如果相等就比较第二个字符,以此类推
>>> lst = ["abc", "中国", "bd", "abd", "你好"]
>>> lst.sort()
>>> lst
['abc', 'abd', 'bd', '中国', '你好']
>>> ord('中')
20013
>>> ord('a')
97
2.3.7.统计(count、index)
1.count
判断单个元素出现的次数
>>> lst
['abc', 'abd', 'bd', '中国', '你好']
>>> lst.count("abc")
1
>>> lst.count("a")
0
2.index
查看第一次出现的下标位置
>>> lst.index("abd")
1
>>> lst.index("a")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'a' is not in list
2.3.7.遍历
1.直接打印
lst = ["aa", "bb", "cc"]
for i in lst:
print(i)
# 执行结果
aa
bb
cc
2.返回元素下标和元素值
(1)一起输出
# 返回元素下标和元素值
for i in enumerate(lst):
print(i)
# 执行结果
(0, 'aa')
(1, 'bb')
(2, 'cc')
(2)用两个元素接收,前一个取下标值,第二个取元素值
# 用两个元素接收,前一个取下标值,第二个取元素值
for i, j in enumerate(lst):
print(f"{i}-->{j}")
# 执行结果
0-->aa
1-->bb
2-->cc
2.3.8 成员关系
判断某个元素是不是lst里的元素
# 判断某个元素是不是lst里的元素
lst = ["aa", "bb", "cc"]
print("a" in lst)
print("cc" in lst)
False
True