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的更多相关文章

  1. python中序列类型

    Python中的序列类型使用 元组类型 一旦被创建,就无法被修改. 创建 使用()或者tuple()创建 creater1=('cat', 'dog', 'tiger', 'human') creat ...

  2. python高级(二)—— python内置序列类型

    本文主要内容 序列类型分类: (1)容器序列.扁平序列 (2)可变序列.不可变序列 列表推导式 生成器表达式 元组拆包 切片 排序(list.sort方法和sorted函数) bisect pytho ...

  3. python基础--数值类型和序列类型

    Python中数值类型:int(整数),float(浮点数),True/False(布尔值,首字母必须大写) int:1    #任意整数 float:2.3   #小数 python赋值: a = ...

  4. Python数据类型之“序列概述与基本序列类型(Basic Sequences)”

    序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list. ...

  5. python 序列类型

    1.不可变的序列类型:tuple.range.str.set 001:对于tuple 类型有如下几种构造方式 1.() 构造一个空的元组. 2.a | (a,) 构造一个只有一个元素的元组. 3.tu ...

  6. Python序列类型

    Python序列类型 序列:字符.列表.元组 所有序列都支持迭代 序列表示索引为非负整数的有序对象集合 字符和元组属于不可变序列,列表可变 1)字符 字符串字面量:把文本放入单引号.双引号或三引号中: ...

  7. 【转】Python数据类型之“序列概述与基本序列类型(Basic Sequences)”

    [转]Python数据类型之“序列概述与基本序列类型(Basic Sequences)” 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主 ...

  8. Python序列类型各自方法

    在Python输入dir(str).dir(list).dir(tuple)可查看各种序列类型的所有方法. 对于某个方法不懂怎么使用的情况,可以直接help(str.split)对某个方法进行查询. ...

  9. Python 基本数据类型和序列类型

    python 3.6.4 中,有9种数据类型: int, float, bool, complex, list, tuple, string, set, dict (1).int 整型,不可变 (2) ...

随机推荐

  1. 【学习笔记】windows安装jhipster踏坑记录

    序: 入职新公司第二天了,本来第一天是配置环境来着,配了一下午也没搞成那个jhipster的安装,每次以为应该正常的时候都是不对,yo是yeoman的指令,但是我是使用yarn管理的yeoman 纠结 ...

  2. istio入门(05)istio的架构概念2

  3. Docker学习笔记 - Docker的基本概念

    一.cs架构 Docker客户端:本地或远程 Docker服务端:守护进程Docker Daemon 二.基本概念 Docker镜像:打包阶段,层叠的只读文件系统,引导->root(ubuntu ...

  4. DOM节点删除之empty和remove区别

    要移除页面上节点是开发者常见的操作,jQuery提供了几种不同的方法用来处理这个问题,这里我们开仔细了解下empty和remove方法 empty 顾名思义,清空方法,但是与删除又有点不一样,因为它只 ...

  5. (第一章)对程序员来说CPU是什么

    这几天,看到一本书,<程序是怎么跑起来的>,觉得之前都没有完整的看完一本书,现在要从这本书开始,慢慢的培养自己写读书笔记的习惯,不能度过去就忘了. 学习是一个螺旋上升的过程,不要指望一下子 ...

  6. 【VB超简单入门】四、编译工程及传播程序文件

    四.编译工程及传播程序文件 为什么在这一章中讲到编译这部分内容呢?因为当我们学会怎样用VB开发程序之后,内心肯定喜悦无比.这时候就要和朋友分享一下快乐,所以要先学习编译EXE程序文件. 首先新建工程. ...

  7. SpringBoot(六):springboot热部署

    在j2ee项目开发中,热部署插件是JRebel.JRebel的使用为开发人员带来了极大的帮助,且挺高了开发便捷.而在SpringBoot开发生态环境中,SpringBoot热部署常用插件是:sprin ...

  8. 初识 SpringMVC

    1.Spring MVC 的工作流程 1.web请求被 前端控制器(DispatcherServlet)拦截 2.DispatcherServlet调用 映射处理器(HandelerMapping)查 ...

  9. LinkedHashMap简明

    LinkedHashMap 构造方法摘要 inkedHashMap() 构造一个带默认初始容量 (16) 和加载因子 (0.75) 的空插入顺序LinkedHashMap 实例. LinkedHash ...

  10. mysql zip 文件安装

    1.下载 https://dev.mysql.com/downloads/mysql/ 2.解压,配置环境变量 MYSQL_HOME:D:\mysql path后面加 :%MYSQL_HOME%\bi ...