前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常见数据结构-list列表

常见数据结构-list列表

作者头像
星哥玩云
发布2022-08-19 15:20:21
5980
发布2022-08-19 15:20:21
举报
文章被收录于专栏:开源部署

一、什么情况下使用列表?

  • 思考 存储5个人的年龄,求他们的平均值
代码语言:javascript
复制
age1 = <span class="hljs-number">18</span>
age2 = <span class="hljs-number">19</span>
age3 = <span class="hljs-number">20</span>
age4 = <span class="hljs-number">21</span>
age5 = <span class="hljs-number">22</span>
  • 思考 存储100个人的年龄
  • 解决 使用列表

二、基本使用

  • 本质 是一个有序集合
  • 创建列表
代码语言:javascript
复制
<span class="hljs-string">'''
创建列表
    格式:列表名 = [元素1, 元素2, ……, 元素n]
'''</span>
<span class="hljs-comment"># 创建空列表</span>
li1 = []
print(li1, type(li1))

<span class="hljs-comment"># 创建带有元素的列表</span>
<span class="hljs-comment"># 注意:列表中元素的类型可以不同,但是在今后的开发中一般不存在这种状况</span>
li2 = [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-string">"good"</span>, <span class="hljs-keyword">True</span>]
print(li2)
  • 列表元素的访问
代码语言:javascript
复制
<span class="hljs-comment"># 列表元素的访问</span>
li3 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
<span class="hljs-comment"># 往列表末尾添加元素</span>
li3.append(<span class="hljs-number">6</span>)
<span class="hljs-comment"># 获取元素  列表名[下标]</span>
print(li3[<span class="hljs-number">2</span>])
<span class="hljs-comment"># print(li3[9]) #下标超出范围,溢出</span>
<span class="hljs-comment"># print(li3[-1]) # 下标可以是负数,-1表示最后一个元素的下标,-2表示倒数第二个,依次类推</span>
<span class="hljs-comment"># 修改元素 列表名[下标] = 值</span>
li3[<span class="hljs-number">2</span>] = <span class="hljs-number">33</span>
<span class="hljs-comment"># li3[6] = 10 #下标不存在</span>
print(li3)
<span class="hljs-comment"># 截取列表</span>
print(li3[<span class="hljs-number">1</span>:<span class="hljs-number">3</span>])
print(li3[<span class="hljs-number">1</span>:])
print(li3[:<span class="hljs-number">3</span>])
  • 列表操作
代码语言:javascript
复制
<span class="hljs-comment"># 列表相加(列表组合)</span>
li4 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>]
li5 = [<span class="hljs-number">4</span>,<span class="hljs-number">5</span>,<span class="hljs-number">6</span>]
li6 = li4 +li5
print(li6)
代码语言:javascript
复制
<span class="hljs-comment"># 列表相乘(列表重复)</span>
li7 = [<span class="hljs-number">7</span>,<span class="hljs-number">8</span>,<span class="hljs-number">9</span>]
li8 = li7 * <span class="hljs-number">3</span>
print(li7)
print(li8)
代码语言:javascript
复制
<span class="hljs-comment"># 成员判断</span>
li9 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>]
print(<span class="hljs-number">1</span> <span class="hljs-keyword">in</span> li9)
print(<span class="hljs-number">4</span> <span class="hljs-keyword">in</span> li9)

三、二维列表

概念:列表中的元素是一位列表的列表

本质:一维列表

代码语言:javascript
复制
li1 = [[<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>],
        [<span class="hljs-number">4</span>,<span class="hljs-number">5</span>,<span class="hljs-number">6</span>],
        [<span class="hljs-number">7</span>,<span class="hljs-number">8</span>,<span class="hljs-number">9</span>]]

print(li1[<span class="hljs-number">1</span>][<span class="hljs-number">1</span>])

四、内置功能

  • append(obj) 在列表的末尾添加一个新的元素
代码语言:javascript
复制
li1 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
li1.append(<span class="hljs-number">6</span>)
li1.append([<span class="hljs-number">7</span>,<span class="hljs-number">8</span>,<span class="hljs-number">9</span>])
print(li1)
  • extend(seq) 在列表的末尾一次追加多个元素
代码语言:javascript
复制
li2 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
li2.extend([<span class="hljs-number">6</span>,<span class="hljs-number">7</span>,<span class="hljs-number">8</span>])
print(li2)
  • insert(index, obj) 将元素obj按下标插入列表,不会覆盖原数据,原数据会按顺序后移
代码语言:javascript
复制
li3 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
li3.insert(<span class="hljs-number">2</span>, <span class="hljs-number">100</span>)
print(li3)
  • pop(index=-1) 移除列表中指定下标出的元素,默认移除最后一个,返回被删掉的数据
代码语言:javascript
复制
li4 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
data = li4.pop()
print(data, li4)
  • remove(obj) 移除列表中第一次出现的obj元素
代码语言:javascript
复制
li5 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>,<span class="hljs-number">2</span>,<span class="hljs-number">4</span>,<span class="hljs-number">2</span>,<span class="hljs-number">5</span>,<span class="hljs-number">6</span>,<span class="hljs-number">7</span>]
li5.remove(<span class="hljs-number">2</span>)
print(li5)
  • clear() 清空列表
代码语言:javascript
复制
li6 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
li6.clear()
print(li6)
  • count(obj) 返回元素obj在列表中出现的次数
代码语言:javascript
复制
li7 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>,<span class="hljs-number">2</span>,<span class="hljs-number">4</span>,<span class="hljs-number">2</span>,<span class="hljs-number">5</span>,<span class="hljs-number">6</span>,<span class="hljs-number">7</span>]
print(li7.count(<span class="hljs-number">2</span>))
  • len(seq) 返回列表中元素的个数
代码语言:javascript
复制
li8 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
print(len(li8))
  • index(obj) 在列表中获取元素第一次出现的下标,没有则会抛出ValueError异常
代码语言:javascript
复制
li9 = [1,2,3,4,5,2,4,2,5,6,7]
print(li9.index(2))
  • max(seq) 返回列表中最大的元素
代码语言:javascript
复制
print(max([2,3,4,1,4,6,7,3]))
  • min(seq) 返回列表中最小的元素
  • reverse() 列表倒序
代码语言:javascript
复制
li10 = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
li10.reverse()
print(li10)
  • sort() 根据func函数给定的规则进行列表元素的排序,默认升序
代码语言:javascript
复制
li11 = [<span class="hljs-number">2</span>,<span class="hljs-number">1</span>,<span class="hljs-number">3</span>,<span class="hljs-number">5</span>,<span class="hljs-number">4</span>]
li11.sort()
print(li11)
  • list(seq) 将其他类型的集合转为列表类型
代码语言:javascript
复制
str1 = "baism"
li12 = list(str1)
print(li12, type(li12))

五、内存问题

  • 赋值
    • ==与is
代码语言:javascript
复制
num1 = <span class="hljs-number">1</span>
num2 = <span class="hljs-number">1</span>
print(id(num1), id(num2))
print(num1 == num2)
print(num1 <span class="hljs-keyword">is</span> num2)
num3 = <span class="hljs-number">401</span>
num4 = <span class="hljs-number">401</span>
print(id(num3), id(num4))
print(num3 == num4)
print(num3 <span class="hljs-keyword">is</span> num4)
代码语言:javascript
复制
a = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
b = a
print(id(a), id(b))
print(a == b)
print(a <span class="hljs-keyword">is</span> b)
代码语言:javascript
复制
c = [1,2,3,4,5,[7,100,9]]
d = c
print(c == d)
print(c is d)
c[5][0] = 60
print(c)
print(d)
  • 浅拷贝 只拷贝表层元素
代码语言:javascript
复制
<span class="hljs-keyword">from</span> copy <span class="hljs-keyword">import</span> copy

a = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
b = copy(a)
print(id(a), id(b))
print(a == b)
print(a <span class="hljs-keyword">is</span> b)

c = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,[<span class="hljs-number">4</span>,<span class="hljs-number">5</span>,<span class="hljs-number">6</span>]]
d = copy(c)
print(id(c), id(d))
print(c == d)
print(c <span class="hljs-keyword">is</span> d)
print(id(c[<span class="hljs-number">3</span>]), id(d[<span class="hljs-number">3</span>]))
print(c[<span class="hljs-number">3</span>] == d[<span class="hljs-number">3</span>])
print(c[<span class="hljs-number">3</span>] <span class="hljs-keyword">is</span> d[<span class="hljs-number">3</span>])
  • 深拷贝 注意:不论深拷贝还是浅拷贝都会在内存中生成一片新的内容空间(把拷贝的内容在内存中重新创建一份) 两者有区别的前提:元素中有另外的列表 说明:深拷贝在内存中重新创建所有子元素
代码语言:javascript
复制
<span class="hljs-keyword">from</span> copy <span class="hljs-keyword">import</span> deepcopy

a = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
b = deepcopy(a)
print(id(a), id(b))
print(a == b)
print(a <span class="hljs-keyword">is</span> b)

c = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>,[<span class="hljs-number">6</span>,<span class="hljs-number">7</span>,<span class="hljs-number">8</span>]]
d = deepcopy(c)
print(id(c), id(d))
print(c == d)
print(c <span class="hljs-keyword">is</span> d)
print(id(c[<span class="hljs-number">5</span>]), id(d[<span class="hljs-number">5</span>]))
print(c[<span class="hljs-number">5</span>] == d[<span class="hljs-number">5</span>])
print(c[<span class="hljs-number">5</span>] <span class="hljs-keyword">is</span> d[<span class="hljs-number">5</span>])
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、基本使用
  • 三、二维列表
  • 四、内置功能
  • 五、内存问题
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档