人生苦短,我选Python

前文传送门

小白学 Python(1):开篇

小白学 Python(2):基础数据类型(上)

小白学 Python(3):基础数据类型(下)

小白学 Python(4):变量基础操作

小白学 Python(5):基础运算符(上)

小白学 Python(6):基础运算符(下)

小白学 Python(7):基础流程控制(上)

小白学 Python(8):基础流程控制(下)

小白学 Python(9):基础数据结构(列表)(上)

列表切片

一说到列表切片不知道各位同学有没有想起来前面我们讲过的字符串切片,没想起来的同学为自己的记忆默哀 3 秒钟吧。

开个玩笑:)可以返回去看看之前的文章。

列表切片是指将列表其中的一部分切出来。

语法: list[起始索引:终止索引:步长间隔]

注意: 这里的终止索引和字符串切片是一样的,并不会取到。

下面直接上代码,解析已经添加在注释中。

其实我就是懒,不想一条一条拆开写了,来打我呀~~~

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 省略步长时默认为 1
print(list1[3:8])
# 步长为 2
print(list1[3:8:2])
# 从索引 3 开始取到最后
print(list1[3:])
# 从头开始取,取到索引 8 ,并且索引 8 娶不到
print(list1[:8])
# 取所有,步长为 3
print(list1[::3])
# 从索引 1 开始,取到倒数第 2 个,并且倒数第 2 个 取不到
print(list1[1:-2])
# 取所有
print(list1[:])
# 取逆序列表
print(list1[::-1])
# 取逆序,并且步长为 2
print(list1[8:1:-2])

执行结果如下:

[3, 4, 5, 6, 7]
[3, 5, 7]
[3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 3, 6, 9]
[1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[8, 6, 4, 2]

列表常用方法

我们这里分别演示一下:

list.append(obj)

在列表末尾添加新的对象

list1.append("Python")
print(list1)

结果如下:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python']

list.count(obj)

统计某个元素在列表中出现的次数

list2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

list2.append("Python")
list2.append("Python")
list2.append("Python")
list2.append(1)
print(list2.count("Python"))
print(list2.count(1))

结果如下:

3
2

我们这里分别统计了字符串 "Python" 和数字 1 出现的次数。

list.extend(seq)

在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

list1.extend(list2)

print(list1)

结果如下:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 'Python', 'Python', 1]

可以看到 list1 在经过 list2 的扩展后,同时含有了 list1 和 list2 的所有数据。

extend 和 append 非常像,但是 extend 一次可以添加一个列表,而 append 一次只能添加一个元素。

list.index(obj)

从列表中找出某个值第一个匹配项的索引位置

print(list1.index("Python"))

结果如下:

10

list.insert(index, obj)

将对象插入列表

index 是插入的索引值, obj 是要插入的元素。

list1.insert(0, "Hello")
print(list1) list3 = [0, 1, 2]
list4 = [2, 2]
list3.insert(1, list4)
print(list3)

结果如下:

['Hello', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 'Python', 'Python', 1]
[0, [2, 2], 1, 2]

当然插入时可以是一个单独的元素,也可以是一个列表。

list.pop([index=-1])

移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

list3.pop()
print(list3) list3.pop(1)
print(list3)

结果如下:

[0, [2, 2], 1]
[0, 1]

同样在移除索引的时候,可以移除一个元素,也可以移除一个列表。

list.remove(obj)

移除列表中某个值的第一个匹配项

list5 = [1, 2, 3, 4, 4, 5]
list5.remove(4)
print(list5)

结果如下:

[1, 2, 3, 4, 5]

list.reverse()

反向列表中元素

list5.reverse()
print(list5)

结果如下:

[5, 4, 3, 2, 1]

虽然我们刚才用步长为 -1 的形式同样做到了列表逆序,但是这两个操作是不一样的。

list5 = [1, 2, 3, 4, 4, 5]
list5.remove(4)
print(list5)
print(id(list5))
list5.reverse()
print(list5)
print(id(list5))
print(id(list5[::-1]))

结果如下:

[1, 2, 3, 4, 5]
2629333420040
[5, 4, 3, 2, 1]
2629333420040
2629333420104

各位同学看明白了,通过步长获得的逆序列表实际上是一个新的列表,在内存的地址发生了变动,而通过 list.reverse() 打印的逆序列表还是这个列表本身,它的内存地址并未发生改变。

list.sort( key=None, reverse=False)

对原列表进行排序

list6 = [2, 5, 1, 9, 6, 3]
list6.sort()
print(list6)
list6.sort(reverse=True)
print(list6)

结果如下:

[1, 2, 3, 5, 6, 9]
[9, 6, 5, 3, 2, 1]

怎么样,对列表进行正序和逆序排序是不是很简单。

后面还有两个方法 list.clear() (清空列表) 和 list.copy() (复制列表)我就不做演示,大家可以自己动手尝试一下,有不清楚的可以在公众号后台留言问我。

示例代码

本系列的所有代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便大家取用。

示例代码-Github

示例代码-Gitee

小白学 Python(10):基础数据结构(列表)(下)的更多相关文章

  1. 小白学 Python(9):基础数据结构(列表)(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  2. 小白学 Python(13):基础数据结构(字典)(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  3. 小白学 Python(15):基础数据结构(集合)(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  4. 小白学 Python(11):基础数据结构(元组)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  5. 小白学 Python(12):基础数据结构(字典)(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  6. 小白学 Python(14):基础数据结构(集合)(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. 小白学 Python(17):基础数据类型(函数)(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  8. 小白学 Python(24):Excel 基础操作(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  9. 小白学 Python(6):基础运算符(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

随机推荐

  1. 新手学习FFmpeg - 调用API编写实现多次淡入淡出效果的滤镜

    前面几篇文章聊了聊FFmpeg的基础知识,我也是接触FFmpeg不久,除了时间处理之外,很多高深(滤镜)操作都没接触到.在学习时间处理的时候,都是通过在ffmpeg目前提供的avfilter基础上面修 ...

  2. 在Docker中启动Cloudera

    写在前面 记录一下,一个简单的cloudera处理平台的构建过程和一些基本组件的使用 前置说明 需要一台安装有Docker的机器 docker常用命令: docker ps docker ps -a ...

  3. 使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课

    前言: 今年是建国70周年,爱国热情异常的高涨,为自己身在如此安全.蓬勃发展的国家深感自豪. 我们公司楼下为庆祝国庆,拉了这样的标语,每个人做好一件事,就组成了我们强大的祖国. 看到这句话,深有感触, ...

  4. ubuntu13 eclipse菜单栏失效解决

    使用ubuntu13安装完eclipse和myeclipse后发现菜单栏单击时不显示下拉框只能通过快捷键显示. 百度了一下,找到以下解决办法. 打开终端运行下面的命令,打开eclipse后可正常显示菜 ...

  5. java ThreadLocal使用

    1.源码分析 此处以JDK1.8版本分析 1.1 set方法 /** * Sets the current thread's copy of this thread-local variable * ...

  6. phaser学习总结之Tween详解

    前言 在上一章phaser学习总结之phaser入门教程中,我们已经初步入门了phaser,并通过一个案例了解了phaser,现在我们需要对phaser中的对象进行讲解,本章需要讲解的是tween,即 ...

  7. BERT论文解读

    本文尽量贴合BERT的原论文,但考虑到要易于理解,所以并非逐句翻译,而是根据笔者的个人理解进行翻译,其中有一些论文没有解释清楚或者笔者未能深入理解的地方,都有放出原文,如有不当之处,请各位多多包含,并 ...

  8. [Machine Learning] Linear regression

    1. Variable definitions m : training examples' count \(y\) : \(X\) : design matrix. each row of \(X\ ...

  9. Patorjk

    http://www.patorjk.com/software/taag/#p=display&f=Henry%203D&t=CFR%20SpringBoot%20

  10. MySql 8.0.12安装、配置

    1. 参考:① 菜鸟教程下载安装MySQl ② 8.0.12安装方法 以下是我遇到的问题: 2.执行 mysqd --initialize --console 后,这个时候运行突然报"无法启 ...