【Python】(8)容器类型——列表:特征、增加、删除、修改、统计、遍历

目录

一、容器类型

二、列表(list)

        2.1.什么是列表?

        2.2列表的三个特性:

        1.有序的项目集合

        2.可以存放任何类型对象

        3.可变数据类型

        2.3列表的基本操作

        2.3.1增加(append、insert、extend)

        2.3.2列表可以进行加法和乘法

        2.3.3.删除(pop、remove、del、clear)

        2.3.4.修改

        2.3.5.列表反转(负切片、reverse)

        2.3.6.排序(sort)

        2.3.7.统计(count、index)

        2.3.7.遍历

        2.3.8 成员关系


一、容器类型

字符串也是容器类型,只是一旦定义就不可变

程序设计的基本结构:

如:用户密码验证时,如果一个程序需要能验证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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值