Python的序列类型——List
List
列表 List,本质是一个链表,从链表的实现角度来讲,链表的每一个结点都存放着值和指向下一个节点的指针。
因此链表在内存的存储可以是不连续的,它是一种高效的数据结构。因此列表与字符串的区别是列表可以进行任意
的修改。并且,列表的元素是任意的数据类型。当然,它支持循环、切片等多种操作。如果我们对列表进行切片,
那结果仍是一个列表。
列表在对某个序列进行转换的时候,内部是通过循环进行的,而数字不能作为循环的对象因此数字不能转化
为列表;而当列表转化为字符串的时候,字符串函数将整个列表作为字符串,这种做法让字符串变得丑陋,如果想
变得美观可以自己写循环解决。
1. 将字符 ==》 为列表
string = "abcdefg" print(list(string))
2. 列表 ==》 字符串:使用for循环
li = [1,2,3,4,"I","love","you"]
for i in li:
string = string + str(i)
print(string)
3. 列表 ==》 字符串:列表中只有字符串时可使用join函数
li = ["I","love","you"]
print("".join(li))
4. 聊聊extend(iterable)函数,该函数能扩展原列表,参数iterable是可迭代对象
li = [1,2,3,4,"I","love","you"]
li.extend([6,"here"])
li.extend("abc") #请注意和append的区别
print(li) #输出:[1, 2, 3, 4, 'I', 'love', 'you', 6, 'here', 'a', 'b', 'c']
注:与append相比,extend相当与在内部进行循环,再使用append函数往列表追加元素
5. 把列表当作堆栈使用
用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。
li = ["]
li.append(")
print(li) #输出:['1', '2', '3', '4', '5', '6']
del_li = li.pop() #不加参数的pop
print(del_li) #获取删除的值:6
print(li) #显示删除结果:['1', '2', '3', '4', '5']
6. 把列表当作队列使用
我们也可以把列表当做队列使用,队列作为特定的数据结构,最先进入的元素最先释放(先进先出)。不过,
列表这样用效率不高。相对来说从列表末尾添加和弹出很快;在头部插入和弹出很慢(因为,为了一个元素,要移
动整个列表中的所有元素)。要实现队列,使用 collections.deque,它为在首尾两端快速插入和删除而设计。例如:
from collections import deque #导入 collections模块的deque函数
li = ["Lily","Lynn Lee","John"]
queue = deque(li) #使用deque函数
queue.append("Alger") #往队列插入数据
queue.popleft() #删除头部
print(queue) #打印结果:deque(['Lynn Lee', 'John', 'Alger'])
7. 列表推导式
列表推导式由包含一个表达式的括号组成,表达式后面跟随一个 for 子句,之后可以有零或多个 for 或 if 子句。
结果是一个列表,由表达式依据其后面的 for 和 if 子句上下文计算而来的结果构成。它的表达式的一般形式为:
[ 表达式 for [ if 子 句 ] ] 。 下面将以简单的例子说明列表推导式的作用。
7.1 生成列表中x的2次幂——
- 不使用列表推导式
li = list(map(lambda x: x**2, range(10))) print(li) #打印结果为:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- 使用列表推导式
li = [x**2 for x in range(10)] print(li) #打印结果为:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
7.2 按两个列表元素不同的条件生成坐标——
- 不使用列表推导式
li = []
for x in [1,2,3]:
for y in [3,4,5]:
if x != y:
li.append((x, y))
print(li) #输出:[(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5)]
- 使用列表推导式
li = [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] print(li) #输出:[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
很显然,列表推导式非常简洁,增强程序的可读性
7.3 列表推导式的规范——
列表推导式的一般形式为:[ 表达式 for [if子句] ],在这里表达式如果不是简单的一条语句应该使用括号括起来。
不用括号括起来:报错(语法错误)
[x, x**2 for x in range(6)] #报错
用括号括起来:正常执行
from math import pi li = [str(round(pi, i)) for i in range(1, 4)] print(li) #输出:['3.1', '3.14', '3.142']
7.4 应用举例:交换矩阵的行列——
mylist = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
#第一个推导式获取原矩阵的三行数据,然后对于每一行一次打印
li = [ [row[i] for row in mylist] for i in range(4) ]
print(li) #输出[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
8. 其他常用函数总结如下:

Python的序列类型——List的更多相关文章
- python中序列类型
Python中的序列类型使用 元组类型 一旦被创建,就无法被修改. 创建 使用()或者tuple()创建 creater1=('cat', 'dog', 'tiger', 'human') creat ...
- python高级(二)—— python内置序列类型
本文主要内容 序列类型分类: (1)容器序列.扁平序列 (2)可变序列.不可变序列 列表推导式 生成器表达式 元组拆包 切片 排序(list.sort方法和sorted函数) bisect pytho ...
- python基础--数值类型和序列类型
Python中数值类型:int(整数),float(浮点数),True/False(布尔值,首字母必须大写) int:1 #任意整数 float:2.3 #小数 python赋值: a = ...
- Python数据类型之“序列概述与基本序列类型(Basic Sequences)”
序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list. ...
- python 序列类型
1.不可变的序列类型:tuple.range.str.set 001:对于tuple 类型有如下几种构造方式 1.() 构造一个空的元组. 2.a | (a,) 构造一个只有一个元素的元组. 3.tu ...
- Python序列类型
Python序列类型 序列:字符.列表.元组 所有序列都支持迭代 序列表示索引为非负整数的有序对象集合 字符和元组属于不可变序列,列表可变 1)字符 字符串字面量:把文本放入单引号.双引号或三引号中: ...
- 【转】Python数据类型之“序列概述与基本序列类型(Basic Sequences)”
[转]Python数据类型之“序列概述与基本序列类型(Basic Sequences)” 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主 ...
- Python序列类型各自方法
在Python输入dir(str).dir(list).dir(tuple)可查看各种序列类型的所有方法. 对于某个方法不懂怎么使用的情况,可以直接help(str.split)对某个方法进行查询. ...
- Python 基本数据类型和序列类型
python 3.6.4 中,有9种数据类型: int, float, bool, complex, list, tuple, string, set, dict (1).int 整型,不可变 (2) ...
随机推荐
- Spring事务注意点
service中未带事务的方法调用了自身带事务的方法时,按下面写法数据是提交不了的. public String getMaxSystemVersionNo() { SystemVersion ver ...
- Python内置函数(57)——print
英文文档: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) Print objects to the text str ...
- GIT入门笔记(10)- 多种撤销修改场景和对策
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file. 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步, ...
- OAuth2.0学习(1-1)OAuth2.0是什么?
目前很多开放平台如新浪微博开放平台都在使用提供开放API接口供开发者使用,随之带来了第三方应用要到开放平台进行授权的问题 OAuth就是用于为第三方应用授权访问用户的资源应用的. 目前有OAuth1. ...
- uvalive 3602 DNA Consensus String
https://vjudge.net/problem/UVALive-3602 题意: 给定m个长度均为n的DNA序列,求一个DNA序列,使得它到所有的DNA序列的汉明距离最短,若有多个解则输出字典序 ...
- spark2.1注册内部函数spark.udf.register("xx", xxx _),运行时抛出异常:Task not serializable
函数代码: class MySparkJob{ def entry(spark:SparkSession):Unit={ def getInnerRsrp(outer_rsrp: Double, we ...
- Hive&SqlServerql:inner join on条件中如果两边都是空值的情况下,关联结果中会把数据给过滤掉。
今天遇到的一个大坑,话不多少,看sql和下边的查询结果: --问题:恰好把buildingid is null的记录给过滤掉 ),buildingid ),)); ); ); ); ); ); ); ...
- 如何彻底解决MySQL更改默认字符集以及字符乱码问题!!!
在我们使用MySQL数据库时,字符乱码,对我们来说是一个很头疼的问题.今天笔者就来教大家如何彻底解决更改默认字符集以及字符乱码问题. 当我们使用压缩包进行MySQL安装后,系统会使用默认的字符集,这时 ...
- 推荐系统——online(上)
框架介绍 上一篇从总体上介绍了推荐系统,推荐系统online和offline是两个组成部分,其中offline负责数据的收集,存储,统计,模型的训练等工作:online部分负责处理用户的请求,模型数据 ...
- [持续开源]基于nodejs+ligerui的一款mongodb web 端查询工具(MongoStudio)
这是我2015年入猫酷写的一款内部工具,目的是为了开发人员可以查询数据库数据以调查线上bug,数据不仅限业务数据及日志数据,其目的是为了避免开发人员直接链接生产环境数据库,以免误操作影响生产. 当时是 ...