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. Spring MVC Restful Put方法无法获取参数值

    Spring MVC Restful 无法通过@ReqeustParam获取参数值 原因是Tomcat只支持POST/GET获取参数值,对于PUT这些方法需要通过HttpPutFormContentF ...

  2. easyUI combobox 添加空白项

    今天测试反馈了一个问题,希望可以在下拉框下面加一个空白的选项(下拉框用的是combobox方法). 开始分析这个问题: 首先,这个数据都是后台读出来的,那么我在后台直接添加可以么,答案是可以的,如果没 ...

  3. Browser Object Model

    BOM:浏览器提供的一系列对象 window对象是BOM最顶层对象 * 计时器setInterval(函数,时间)设置计时器 时间以毫秒为单位 clearInterval(timer) 暂停计时器se ...

  4. 学习UI的总结

    学习前端有一段时间了,一直在看书上的理论知识,而实战项目却很少.老师常说,想要知道自己的实力有多少,知识掌握了多少,最好的方法就是去实践了,实践出真知嘛.于是在学习中,总要是通过项目的实践以及理论知识 ...

  5. java.lang.String 类源码解读

    String类定义实现了java.io.Serializable, Comparable<String>, CharSequence 三个接口:并且为final修饰. public fin ...

  6. JAVA_SE基础——1.JDK&JRE下载及安装

    这是我学了JAVA来写的第一篇博客: 我首先是在传智播客领了张.毕向东老师的免费JAVA学习光盘来学习! 下面我来教大家安装使用JAVA时候必备的JDK 1.首先上甲骨文公司的官方网站下载JDK的安装 ...

  7. iot前台开发环境:搭建 SpringBoot+angularJs2

    参考网站 Angular 中文官网:https://angular.cn/ 参考代码:https://ng.ant.design/#/components/dropdown  npm install ...

  8. OpendID是什么?

    一.OpenID的概念 1.问题的提出 2.OpenID是什么? 3.规范演进 二.OpenID 的运行原理 1.参与者 2.运行原理 3.典型场景 4.开源实现 5.优点&缺点 优点:   ...

  9. 阿里云API网关(4)快速入门(开放 API)

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  10. apigw鉴权分析(1-4)新浪微博开放平台 - 鉴权分析

    一.访问入口 http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E 微博开放接口的调用,如 ...