Python—列表(一个“打了激素”的数组)
我们在C语言中会使用数组来将一大堆数据类型一样的数据挨个摆在一起,但是数组有一个基本的要求,就是数据类型必须是一致的,我们知道Python的变量由于没有数据类型,也就是说Python没有数组这一概念,但是Python引入了更为强大的列表。
基本概念
列表(list)是Python中内置可变序列,是一个有序的元素集合;
列表中的每一个数据称为元素,列表的所有元素放在一对中括号“[”和“]”中,并使用逗号分隔开;
列表元素可以通过索引访问单个元素。
在Python中,同一个列表中元素的数据类型可以各不相同,可以同时包含整数、实数、字符串等基本类型的元素,也可以包含列表、元组、字典、集合、函数以及其他任意对象。
Python采用基于值的自动内存管理模式,变量并不直接存储值,而是存储值的引用或内存地址,这也是python中变量可以随时改变类型的重要原因。同理,Python列表中的元素也是值的引用,所以列表中各元素可以是不同类型的数据。
如果只有一对方括号而没有任何元素则表示空列表。
列表大小没有限制,可以随时修改。 列表增加或删除元素时,列表对象自动进行内存的扩展或收缩,从而保证相邻元素之间没有缝隙。Python列表的这个内存自动管理功能可以大幅度减少程序员的负担,但插入和删除非尾部元素时涉及到列表中大量元素的移动,会严重影响效率。
访问列表中元素时采用索引形式 在非尾部位置插入和删除元素时会改变该位置后面的元素在列表中的索引,这对于某些操作可能会导致意外的错误结果。 除非确实有必要,否则应尽量从列表尾部进行元素的追加与删除操作。
创建与删除
1.如同其他类型的Python对象变量一样,使用“=”直接将一个列表赋值给变量即可创建列表对象。例如:
a_list = ['a', 'b', 'mpilgrim', 'z', 'example']
a_list = []
2.也可以使用list()函数将元组、range对象、字符串或其他类型的可迭代对象类型的数据转换为列表。 例如:
list((3,5,7,9,11)) #将元组转换为列表
list(range(1, 10, 2)) #将range对象转换为列表
list('hello world') #将字符串转换为列表
list({3,7,5}) #将集合转换为列表
list({'a':3, 'b':9, 'c':78}) #将字典的“键”转换为列表
list({'a':3, 'b':9, 'c':78}.items())#将字典的“键:值”对转
3.当不再使用时,使用del命令删除整个列表,如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值。 例如:
x = [1, 2, 3]
del x #删除列表对象
x #对象删除后无法再访问,抛出异常
NameError: name 'x' is not defined
列表推导式
1.列表推导式可以说是Python程序开发时应用最多的技术之一。
以方括号[ ]作为开始和结束的标记。
[expr for value in collection ifcondition]
列表推导式使用非常简洁的方式来快速生成满足特定需求的列表,代码具有非常强的可读性。
aList = [x*x for x in range(10)]
相当于
aList = []
for x in range(10):
aList.append(x*x)
2.过滤不符合条件的元素
aList = [-1,-4,6,7.5,-2.3,9,-11]
[i for i in aList if i>0]
[6, 7.5, 9]
在列表推导式中使用多个循环,实现多序列元素的任意组合,并且可以结合条件语句过滤特定元素
[(x, y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
[(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
列表操作
1.针对列表有一些基本操作,这些操作与字符串操作类似
2.列表常用方法
1)append()、insert()、extend() append()用于向列表尾部追加一个元素,insert()用于向列表任意指定位置插入一个元素,extend()用于将另一个列表中的所有元素追加至当前列表的尾部。这3个方法都属于原地操作,不影响列表对象在内存中的起始地址。
>>> x = [1, 2, 3]
>>> id(x) #查看对象的内存地址
50159368
>>> x.append(4) #在尾部追加元素
>>> x.insert(0, 0) #在指定位置插入元素
>>> x.extend([5, 6, 7]) #在尾部追加多个元素
>>> x
[0, 1, 2, 3, 4, 5, 6, 7]
>>> id(x) #列表在内存中的地址不变
50159368
2)pop()、remove()、clear() pop()用于删除并返回指定位置(默认最后一个)上的元素;remove()用于删除列表中第一个与指定值相等的元素;clear()用于清空列表中的所有元素。均属于原地操作。还可以使用del命令删除列表中指定位置的元素,同样属于原地操作。
>>> x = [1, 2, 3, 4, 5, 6, 7]
>>> x.pop() #弹出并返回尾部元素
>>> x.pop(0) #弹出并返回指定位置的元素
>>> x.clear() #删除所有元素
>>> x
[]
>>> x = [1, 2, 1, 1, 2]
>>> x.remove(2) #删除首个值为2的元素
>>> del x[3] #删除指定位置上的元素
3)count()、index() count()用于返回列表中指定元素出现的次数;index()用于返回指定元素在列表中首次出现的位置,如果该元素不在列表中则抛出异常。
>>> x = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>> x.count(3) #元素3在列表x中的出现次数
3
>>> x.count(5) #不存在,返回0
0
>>> x.index(2) #元素2在列表x中首次出现的索引
1
>>> x.index(5) #列表x中没有5,抛出异常
ValueError: 5 is not in list
4)sort()、reverse()
sort()方法用于按照指定的规则对所有元素进行排序;reverse()方法用于将列表所有元素逆序或翻转。
>>> x = list(range(11)) #包含11个整数的列表
>>> import random
>>> random.shuffle(x) #把列表x中的元素随机乱序
>>> x
[6, 0, 1, 7, 4, 3, 2, 8, 5, 10, 9]
>>> x.sort(key=lambda item:len(str(item)), reverse=True) #按转换成字符串以后的长度,降序排列
>>> x
[10, 6, 0, 1, 7, 4, 3, 2, 8, 5, 9]
>>> x.sort(key=str) #按转换为字符串后的大小,升序排序
>>> x.reverse() #翻转列表
序列操作常用内置函数
字符串拆分列表
对于字符串,可以通过split()函数,将字符串拆分成一个列表,默认以空格分割 例如:
Python—列表(一个“打了激素”的数组)的更多相关文章
- 列表:一个打了激素的数组3 - 零基础入门学习Python012
列表:一个打了激素的数组3 让编程改变世界 Change the world by program 列表的一些常用操作符 比较操作符 逻辑操作符 连接操作符 重复操作符 成员关系操作符 ...... ...
- 列表:一个打了激素的数组 - 零基础入门学习Python010
列表:一个打了激素的数组 让编程改变世界 Change the world by program 列表:一个打了激素的数组 有时候我们需要把一堆东西暂时存储起来,因为他们有某种直接或者间接的联系,我们 ...
- 列表:一个打了激素的数组2 - 零基础入门学习Python011
列表:一个打了激素的数组2 让编程改变世界 Change the world by program 从列表中获取元素 跟数组一样,我们可以通过元素的索引值(index)从列表获取单个元素,注意,列表索 ...
- 零基础入门学习Python(11)--列表:一个打了激素的数组(2)
前言 上节课我们介绍一个打了激素的数组,叫做列表.列表我们比作一个大仓库,你所能够具现化的东西,都可以往里面扔,它包罗万象.另外还介绍了三个往列表添加元素的方法,分别是: append(),exten ...
- 零基础入门学习Python(12)--列表:一个打了激素的数组(3)
前言 这节课我们继续谈一下Python列表一些知识 知识点 Python常用操作符 比较操作符 >>> list1 = [123] >>> list2 = [234 ...
- 零基础入门学习Python(10)--列表:一个打了激素的数组
前言 有时候我们需要把一些东西暂时保存起来,因为他们有着一些直接或间接的联系,我们需要把它们放在某个组或者集合中,未来可能用得上. 很多接触过编程的朋友都知道,都接触过数组这个概念,那么数组这个概念事 ...
- 【零基础入门学习Python笔记012】一个打了激素的数组3
列表的一些经常使用操作符 比較操作符 逻辑操作符 连接操作符 反复操作符 成员关系操作符 +表示两个连接.*表示复制. list中"+"两边的类型必须一致. 演示样例: water ...
- !!对python列表学习整理列表及数组详细介绍
1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...
- python 获取一个列表有多少连续列表
python 获取一个列表有多少连续列表 例如 有列表 [1,2,3] 那么连续列表就是 [1,2],[2,3],[1,2,3] 程序实现如下: 运行结果:
随机推荐
- hibernate的报错信息a different object with the same identifier value was already associated with the session解决办法
废话不多说,直接说原因,这是在hibernate中,有2个相同类型的实体类具有同样的主键标识符,然后调用update或者调用saveOrUpdate,我朋友出这个错的由于他想要update一条数据时, ...
- 从oracle往greenplum迁移,查询性能不满足要求的定位以及调优过程
一.前言 在一次对比oracle和greenplum查询性能过程中,由于greenplum查询性能不理想,因此进行定位分析,提升greenplum的查询性能 二.环境信息 初始情况下,搭建一个小的集群 ...
- Spark_安装配置_运行模式
一.Spark支持的安装模式: 1.伪分布式(一台机器即可) 2.全分布式(至少需要3台机器) 二.Spark的安装配置 1.准备工作 安装Linux和JDK1.8 配置Linux:关闭防火墙.主机名 ...
- 电子相册之bitmap
位图文件主要分为3部分:1. 文件信息头 14Byte 2. 位图信息头 40Byte 3. RGB颜色阵列 由图像长宽尺寸决定 1. 文件信息头 定义结构体: typedef s ...
- 北京Uber优步司机奖励政策(2月16日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Error starting mongod. /var/run/mongodb/mongod.pid exists.启动mongodb报错
linux上安装mongodb,启动时报上面的错,解决如下: 解决方法: 1.删除mongod.pid文件 rm -rf /var/run/mongodb/mongod.pid 2.修改/tmp/mo ...
- stm32 nucleo系列开发板的接口
1. 首先说的是 Arduino接口,所有的nucleo系列都支持这个接口,而且像F767这种尺寸长的板子也有的,不过是双排排针,其实就是外侧也是 Arduino接口 2. 板子接上电脑之后有个串口
- 海思NB-IOT死机问题解决记录
1. 首先抓下LOG的信息,这个应该是MCU到NB的数据 2. 看下NB到MCU的数据 3. 总结起来,只看到了NB模块的启动,似乎AT指令,肯本没收到.测试中确实出现了复位,但是不清楚是发送的AT指 ...
- DSP5509的RTC实验-第3篇
1. RTC实时时钟,不在过多介绍,本例程直接调用芯片支持库CSL的库函数,用起来比较简单 main() { CSL_init(); printf ("\nTESTING...\n" ...
- tomcat createSecureRandom 花费了将近10分钟
http://www.th7.cn/Program/java/201603/776312.shtml 启动tomcat很慢,检查后发现:[localhost-startStop-1] org.apac ...