零基础入门python3.7 ——基础知识总结(四)列表(list)_雯倾浅忆的博客-程序员宅基地

技术标签: python  

Python 序列(Sequence)是指按特定顺序依次排列的一组数据,它们可以占用一块连续的内存,也可以分散到多块内存中。Python 中的序列类型包括列表(list)、元组(tuple)、字典(dict)和集合(set)。

列表(list)和元组(tuple)比较相似,它们都按顺序保存元素,所有的元素占用一块连续的内存,每个元素都有自己的索引,因此列表和元组的元素都可以通过索引(index)来访问。它们的区别在于:列表是可以修改的,而元组是不可修改的。

字典(dict)和集合(set)存储的数据都是无序的,每份元素占用不同的内存,其中字典元素以 key-value 的形式保存。

一。列表list

所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。

序列索引

列表中的每一个元素都有属于自己隐形的编号。 同个这个编号可以访问到编号所对应的元素。  从左向右索引从0开始。 从右向左索引从-1开始

a = [1, 2, 'python', 'python3.7', True, False]
print(a[0])
print(a[5])
print(a[-1])
print(a[5] == a[-1])

1
False
False
True

定义列表

列表中可以包含python中的任何数据类型  有两种方法可以创建列表

使用‘[]’直接创建并一般将其赋值给一个变量

a = [1, 2, 'python', 'python3.7', True, False]
print(a)

[1, 2, 'python', 'python3.7', True, False]

还可以创建空列表

b = []
print(b)

[]

使用list()函数创建列表

# 将字符串转换成列表
a = list('python3.7')
print(a)
print('-------------')

# 将元组转换成列表
b = list((1, 2, 3, 4, 5))
print(b)
print('--------------')

# 将字典转换成列表
c = list({"name": "小张", 1: 100})
print(c)
print('--------------')

# 将区间转换成列表
d = [list(range(0, 10))]
print(d)
print('---------------')

# 创建空列表
print(list())


['p', 'y', 't', 'h', 'o', 'n', '3', '.', '7']
-------------
[1, 2, 3, 4, 5]
--------------
['name', 1]
--------------
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
---------------
[]

列表元素的访问

可以通过索引访问列表中的元素。 但是不能超过列表的最大索引

a = [1, 2, 'python', 'python3.7', True, False]
print(a[3])
print('-----------')
print(a[4])
print('-----------')
print(a[10])

python3.7
-----------
True
-----------
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 6, in <module>
    print(a[10])
IndexError: list index out of range

序列切片

该操作可以访问一定范围内的列表。返回一个新的列表

a = [1, 2, 'python', 'python3.7', True, False]
"""
sname:表示序列的名称;
start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为 0,也就是从序列的开头进行切片;
end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度;
step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置 step 的值,则最后一个冒号就可以省略。
"""
print(a[1:])
print(a[:])
print(a[4])
print(a[2::2])
print(a[::2])
print(a[::])


[2, 'python', 'python3.7', True, False]
[1, 2, 'python', 'python3.7', True, False]
True
['python', True]
[1, 'python', True]
[1, 2, 'python', 'python3.7', True, False]

修改单个元素

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

a[1] = 'java'
print(a)

[1, 2, 'python', 'python3.7', True, False]
-------
[1, 'java', 'python', 'python3.7', True, False]

修改一组元素 Python 支持通过切片语法给一组元素赋值。在进行这种操作时,如果不指定步长(step 参数),Python 就不要求新赋值的元素个数与原来的元素个数相同;这意味,该操作既可以为列表添加元素,也可以为列表删除元素。

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

a[1:  4] = [100, 2000, 2000, 300, 'java']
print(a)

[1, 2, 'python', 'python3.7', True, False]
-------
[1, 100, 2000, 2000, 300, 'java', True, False]

如果对空切片(slice)赋值,就相当于插入一组新的元素:

 

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

a[4: 4] = [100, 2000, 2000, 300, 'java']
print(a)


[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'python', 'python3.7', 100, 2000, 2000, 300, 'java', True, False]

使用切片语法赋值时,Python 不支持单个值,例如下面的写法就是错误的:

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

a[4: 4] = 100
print(a)

[1, 2, 'python', 'python3.7', True, False]
-------
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 5, in <module>
    a[4: 4] = 100
TypeError: can only assign an iterable

但是如果使用字符串赋值,Python 会自动把字符串转换成序列,其中的每个字符都是一个元素,请看下面的代码:

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

a[4: 4] = "java"
print(a)

[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'python', 'python3.7', 'j', 'a', 'v', 'a', True, False]

 

使用切片语法时也可以指定步长(step 参数),但这个时候就要求所赋值的新元素的个数与原有元素的个数相同,

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

a[1:5:2] = [100, 200]
print(a)
print('--------')

a[1:5:2] = '100'
print(a)


[1, 2, 'python', 'python3.7', True, False]
-------
[1, 100, 'python', 200, True, False]
--------
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 9, in <module>
    a[1:5:2] = '100'
ValueError: attempt to assign sequence of size 3 to extended slice of size 2

序列相加

python支持两种相同类型的序列使用“+”运算符进行相加。 但是不会去除重复的元素。 类型相同指的是要不“+”都是列表。要不都是元组或者其他相同的数据类型

a = [1, 2, 'python', 'python3.7', True, False]
b = ['今天会下雨', 1, 'a']
print(a + b)

[1, 2, 'python', 'python3.7', True, False, '今天会下雨', 1, 'a']

序列相乘

用“*”可以生成多个相同元素的列表

a = [1, 2, 'python', 'python3.7', True, False]
print(a * 5)

[1, 2, 'python', 'python3.7', True, False, 1, 2, 'python', 'python3.7', True, False, 1, 2, 'python', 'python3.7', True, False, 1, 2, 'python', 'python3.7', True, False, 1, 2, 'python', 'python3.7', True, False]

检查元素是否包含在序列中

in关键字可以检查元素是否在列表中。存在返回True不存在返回False

a = [1, 2, 'python', 'python3.7', True, False]
print(1 in a)
print(3 in a)

True
False

删除列表

del 关键字可以删除列表。 在实际开发中不经常用到因为python的垃圾回收机制会自动销毁列表

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

del a
print(a)

[1, 2, 'python', 'python3.7', True, False]
-------
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 6, in <module>
    print(a)
NameError: name 'a' is not defined

del:根据索引值删除元素

del 可以删除列表中的单个元素  参数表示要删除元素的索引值

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

del a[1]
print(a)

[1, 2, 'python', 'python3.7', True, False]
-------
[1, 'python', 'python3.7', True, False]

del 也可以删除中间一段连续的元素,其中,第一个表示起始索引,第二个表示结束索引。del 会删除从索引 start 到 end 之间的元素,不包括 end 位置的元素。
 

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

del a[1: 4]
print(a)

[1, 2, 'python', 'python3.7', True, False]
-------
[1, True, False]

pop():根据索引值删除元素 参数表示索引值。如果不写 index 参数,默认会删除列表中的最后一个元素

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

a.pop(1)
print(a)
print('--------')

a.pop()
print(a)

[1, 2, 'python', 'python3.7', True, False]
-------
[1, 'python', 'python3.7', True, False]
--------
[1, 'python', 'python3.7', True]

remove():根据元素值进行删除   要保证要删除的元素存在列表中

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

a.remove("python")
print(a)
print('--------')

a.remove('java')
print(a)


[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'python3.7', True, False]
--------
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 9, in <module>
    a.remove('java')
ValueError: list.remove(x): x not in list

clear():删除列表所有元素

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

a.clear()
print(a)

[1, 2, 'python', 'python3.7', True, False]
-------
[]

append()添加元素

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

#  添加元素
a.append('我喜欢学习')
print(a)
print('--------')

#  添加元组
a.append((1, 2, 3, 4, 5, 6, 7, 'python3'))
print(a)
print('---------')

#  添加列表
a.append(['哈哈哈', 'Jack'])
print(a)


[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'python', 'python3.7', True, False, '我喜欢学习']
--------
[1, 2, 'python', 'python3.7', True, False, '我喜欢学习', (1, 2, 3, 4, 5, 6, 7, 'python3')]
---------
[1, 2, 'python', 'python3.7', True, False, '我喜欢学习', (1, 2, 3, 4, 5, 6, 7, 'python3'), ['哈哈哈', 'Jack']]

extend()方法添加元素

与append()的不同之处在于不会把列表或者元祖视为一个整体,而是把它们包含的元素逐个添加到列表中

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

#  添加元素
a.extend('java')
print(a)
print('--------')

# 追加元组,元祖被拆分成多个元素
a.extend(('java', 'php', 'js'))
print(a)
print('--------')

# 追加列表,列表也被拆分成多个元素
a.extend(['mac', 'phone'])
print(a)


[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'python', 'python3.7', True, False, 'j', 'a', 'v', 'a']
--------
[1, 2, 'python', 'python3.7', True, False, 'j', 'a', 'v', 'a', 'java', 'php', 'js']
--------
[1, 2, 'python', 'python3.7', True, False, 'j', 'a', 'v', 'a', 'java', 'php', 'js', 'mac', 'phone']

insert()给列表指定的位置添加元素

该方法可以携带两个参数。第一个参数表示插入的位置。第二个参数表示要插入的元素。 在插入元组等时和append方法一样会将其视为一个整体

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

# 插入元素
a.insert(2, 'java')
print(a)
print('--------')

# 插入元组,整个元祖被当成一个元素
a.insert(4, (1, 2, 4, 'c'))
print(a)
print('---------')

# 插入列表,整个列表被当成一个元素
a.insert(1,[100, True, 'es6'])
print(a)
print('---------')

# 插入字符串,整个字符串被当成一个元素
a.insert(6, 'hello ')
print(a)

[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'java', 'python', 'python3.7', True, False]
--------
[1, 2, 'java', 'python', (1, 2, 4, 'c'), 'python3.7', True, False]
---------
[1, [100, True, 'es6'], 2, 'java', 'python', (1, 2, 4, 'c'), 'python3.7', True, False]
---------
[1, [100, True, 'es6'], 2, 'java', 'python', (1, 2, 4, 'c'), 'hello ', 'python3.7', True, False]

index() 方法用于检查元素在列表中出现的位置。 如果存在则返回元素的位置。 否则会报错。该方法有三个参数。 第一个参数表示要查找的元素。第二个元素表示开始的位置。 第三个表示结束的位置。

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

# #检索列表中的所有元素
print(a.index("python"))
print('--------')

# 检索1-4之间的元素
print(a.index(2, 1, 4))
print("---------")

# 检查3以后所有的元素
print(a.index(False, 3))
print('----------')

# 检查不存在的元素
print(a.index('java'))


[1, 2, 'python', 'python3.7', True, False]
-------
2
--------
1
---------
5
----------
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 18, in <module>
    print(a.index('java'))
ValueError: 'java' is not in list

count()方法返回元素在列表中出现的次数。如果返回0则表示元素不存在。 该方法因此也被用检查列表中是否存在某个元素

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

print(a.count(2))
print('---------')
print(a.count("java"))

[1, 2, 'python', 'python3.7', True, False]
-------
1
---------
0

len()计算序列的长度,即返回序列中包含多少个元素。

a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')

print(len(a))


[1, 2, 'python', 'python3.7', True, False]
-------
6

max()求最大值

a = [1, 2, 100, 300, 4000]
print(a)
print('-------')

print(max(a))

4000

min()求最小值

a = [1, 2, 100, 300, 4000]
print(a)
print('-------')

print(min(a))

1

list()将序列转为列表

str = 'java'
print(list(str))

['j', 'a', 'v', 'a']

sun()列表求和

a = [1, 2, 100, 300, 4000]
print(a)
print('-------')

print(sum(a))

[1, 2, 100, 300, 4000]
-------
4403

sorted()排序

a = ["a", "java", "python", 'f', 'z']
print(a)
print('-------')

print(sorted(a))

['a', 'java', 'python', 'f', 'z']
-------
['a', 'f', 'java', 'python', 'z']

其他方法归纳

len() 计算序列的长度,即返回序列中包含多少个元素。
max() 找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。
min() 找出序列中的最小元素。
list() 将序列转换为列表。
str() 将序列转换为字符串。
sum() 计算元素和。
sorted() 对元素进行排序。
reversed() 反向序列中的元素。
enumerate() 将序列组合为一个索引序列,多用在 for 循环中
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_25502269/article/details/105469728

智能推荐

Gradlle 全解析_a752392的博客-程序员宅基地

以下内容由飞雪无情提供翻译原文地址http://tools.android.com/tech-docs/new-build-system/user-guide目录1 介绍1.1 新构建系统的目标1.2 Gradle是什么?2 要求3 基础工程3.1 基本的build文件3.2 工程结构3.2.1 配置结构3.3 构建任...

python的分类算法有哪些,Python算法 python分类算法有哪些_weixin_39760295的博客-程序员宅基地

算法工程师(Python语言)是什么职位Python工程师与人工智能工程师的区别是什么?一是Python工程师主要是从事编程,只能算是程序员;人工智能工程师主要是从事算法研究,也称作是算法工程师。两者有本质的区别。二是Python工程师开发编程就像走业务流程一样,很多东西都是现有的,你只Python学了能做算法吗?人工智能 == python? 在人工智能方面,肯定会提到Python,有些初学者甚...

webstorm h5简单表单事件以及表单案例总结(二)_我就是DaLing呀!的博客-程序员宅基地_webstorm实例

表单事件:&lt;body&gt;&lt;form action=""&gt; 用户:&lt;input type="text" name="userName" id="userName"&gt;&lt;br&gt; 电话:&lt;input type="tel" name="usertel" id="usertel"&gt;&lt;br&gt; &lt;i...

python邮件发送pdf_Python电子邮件PDF:一些PDF文件被破坏_儒雅的半帘香雾的博客-程序员宅基地

我正在尝试将PDF文件附加到电子邮件中。在对于一个PDF(打印成PDF的Word文档),它可以工作(收件人在Outlook中打开它没有问题)。在但是对于其他的pdf(除了大了几kb之外,看起来都一样),它们会被破坏。在Here是要使用的示例,该示例失败(已损坏)。在import smtplib, osfrom email.mime.multipart import MIMEMultipartfro...

安装配置elasticsearch—kibana使用—中文分词_知更鸟女孩的博客-程序员宅基地_kibana 分词

目录1 es相关介绍2 安装和启动3 es的基本概念4 es简单办的增删改查5 对于中文的分词1 es相关介绍 1 搜索引擎 elasticSearch6(和elasticSearch5的区别在于,root用户权限、一个库能否建立多个表) 2 搜索引擎 文本搜索(以空间换时间算法) 于同类产品相比(...

为什么计算机连不上无线网络,电脑总是连不上无线怎么回事_18125857287的博客-程序员宅基地

在有些时候我们的电脑总是连不上无线,这是怎么回事呢?下面就由小编来给你们说说电脑总是连不上无线的原因及解决方法吧,希望可以帮到你们哦!电脑总是连不上无线的原因分析一:1、网卡开关开启如果你的电脑是笔记本的话,看下本子侧边网卡开关是不是开启,如果没有开启的话,开启即可2、网卡驱动检查下你的网卡驱动是不是安装完整,如何是存在感叹号的状态,重新安装网卡驱动,当网卡驱动正常即可3、MAC绑定有时候为了防止...

随便推点

//Python学习// input函数的使用实例(附加,非mooc课)_Kathleen_yuan的博客-程序员宅基地

题目:小精灵:您好,欢迎古灵阁,请问您需要帮助吗?需要or不需要?你:需要小精灵:请问您需要什么帮助呢?1 存取款;2 货币兑换;3 咨询你:2小精灵:金加隆和人民币的兑换率为1:51.3,即一金加隆=51.3人民币小精灵:请问您需要兑换多少金加隆呢?(你说了一个数字N)小精灵:好的,我知道了,您需要兑换(你说的数字N)金加隆。小精灵:那么,您需要付给我(你说的数字N*51.3...

SQLServer也会占用80端口_LEE29321的博客-程序员宅基地_sqlserver占用80端口

之前安装了IIS6已经卸载了重启了服务器还是占用了80端口,显然就不是IIS的原因一直启动不了nginx ,于是看错误日志:[emerg] 4376#4256: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access perm...

Android入门攻略(另附一个简单的带socket的模仿QQ实例)_龙傲天参上的博客-程序员宅基地

开头声明一下,这是本人在2017年暑假学的一些皮毛,写给想android入门的人看一看,不是讲android的原理铺路什么的,就是让你从0开始能够简单的写一个自己的android工程,希望对你有所帮助,如有不足请留言指正,感谢(不想看入门的想直接看粗糙仿制qq的请移步到低端)。一、环境搭建--androidAndroid是基于java的编程,个人习惯用eclipse来进行编写,所以

w10计算机管理权限,设置win10管理权限_win10系统如何获取管理员权限_知乎盐选创作者的博客-程序员宅基地

每台win10系统的电脑可能有多个不同的管理员账号,当我们运行或者是删除某个文件或者程序时,需要获取系统的管理员权限才能继续操作或者是正常运行,学会设置win10管理权限对我们使用win10系统至关重要。win10系统如何获取管理员权限,最近有网友反映自己的win10专业版系统,删除不了文件,提示需要管理员权限才能删除,win10系统设置不同级别的管理权限是为了电脑安全所考虑。获取win10管理员...

大家一起写mvc(一)_weixin_30516243的博客-程序员宅基地

关于java的mvc框架层出不穷,可能大家都会用,但是具体的原理知道不知道呢。所以我想写一个写一个简单mvc的系列博客,主要面向想了解这些原理的。其实所谓的mvc框架,基本都是一个原理,就是配置一个filter或者servlet来拦截所有的请求,然后转发请求。这个图就能说明mvc的工作模式1.首先页面发送一个post请求,请求到某一个action。2.然后由servlet或fi...

dubbo+zookeeper搭建分布式环境(服务提供者配置)_踏 浪的博客-程序员宅基地

服务提供者环境搭建项目创建打开IDEA,创建 空的项目,项目命名为 ruoyi,创建 module,模块名为:ruoyi-system .使用Spring.initizlizr创建,依赖先都不选,后面再手写依赖引入依赖&lt;properties&gt; &lt;spring-boot.version&gt;2.1.1.RELEASE&lt;/spring-boot....