概念

列表:有序的,可变的,元素集合

因为列表和字符串都是序列类型,所以很多操作和字符串很相似

但是注意:列表是可变类型,字符串是不可变类型

定义

基本定义

定义方法:[ 元素1, 元素2, ...... ]

列表中的元素是任意的,写什么都可以,也可以是另一个列表

可以定义一个空列表:[]

列表生成式

range(stop):生成 [0, 1, 2, ...., stop-1]

range(start, stop[, step]):生成 [start, start+step, start+2*step, ...... ] ,元素都小于stop

在python2中,range直接返回一个列表,而在python3中,range是一个生成器

使用生成器的原因:为了防止生成的列表会很大,而且可能不会被立即使用

列表推导式

[表达式 for x in xxx]

[表达式 for x in xxx if 条件]

[表达式 for x in xxx for y in yyy]

......

列表常用操作

增加

append

向列表中,追加一个新的元素,在列表的最后

语法:l.append(x)

会直接修改原列表,返回值为None

insert

在列表指定位置追加一个新的元素

在指定索引的前面

语法:l.insert(index, obj)

会直接修改原列表

extend

给列表扩展另外一个可迭代序列

语法:l.extend(iterable)

会直接修改原列表

乘法操作

l * n:列表l,内容重复n次

不修改原列表

加法操作

l1 + l2:组合l1和l2

不修改原列表

删除

del 语句

del 语句可以删除一个指定的元素

(del不止可以用于列表,也可以用于普通变量)

del可以删除整个列表,也可以删除某个元素

pop

移除并返回列表中指定索引对应元素

语法:l.pop(index=-1)

返回被移除的元素

remove

移除列表中的指定元素

语法:l.remove(obj)

参数 obj:需要被移除的元素

注意:

  • 会直接修改原列表
  • 如果元素不存在,会报错
  • 如果存在多个元素,则只会删除最左边的一个
  • 注意,在循环中删除列表元素,有时候会有坑

修改

l[index] = xxx

查找

索引

l[index]

获取元素索引

l.index(obj)

从左到右进行查找

获取指定元素个数

l.count(obj)

获取多个元素,切片

见字符串操作方法,注意列表是可变的

遍历

通过元素进行遍历

for x in l:
......

通过索引进行遍历

for index in range(len(l) + 1):
......

通过枚举进行遍历

枚举对象:通过枚举函数,生成一个新的对象

函数用于将一个可遍历的对象,组合为一个索引序列,同时列出数据下标和数据

语法:enumerate(sequence, [start=0])

  • sequence:一个序列,迭代器,或者其他支持迭代的对象
  • start:起始位置下标

返回的形式:[(0, obj0), (1, obj1), ......]

for t in enumerate(l):
......

也可以使用元组的解包

for idx, obj in enumerate(l):
......

通过迭代器进行遍历

简单了解一下迭代器!

什么是迭代:访问可迭代元素的一种方式,也就是可以按照顺序访问每一项

可迭代对象:能够被迭代的对象称为可迭代对象

判断依据:能作用域for in

判定方法:

import collections
isinstance(obj, collections.Iterable)

迭代器:

  • 是可以记录遍历位置的对象
  • 从第一个元素开始,往后通过next()函数进行遍历
  • 只能往后,不能向前
  • 判定依据:能作用于next函数,next(obj)
  • 判定方法:
    • import collections
    • isinstance(obj, collections.Iterator)
  • 注意:迭代器也是可迭代对象,所以也可以作用于for in

iter:根据一个可迭代对象返回一个迭代器

为什么会产生迭代器

  1. 仅仅在迭代到某个元素时才处理该元素
  • 在此之前,元素可以不存在
  • 在此之后,元素可以被销毁
  • 特别适合用于遍历一些巨大的或者是无限的集合
  1. 提供了一个统一的访问集合的接口
  • 可以把所有的可迭代对象,转换成迭代器进行使用

迭代器的简单使用

  • 使用next()函数,从迭代器中取出下一个对象,从第一个元素开始
  • 因为迭代器比较常用,所以在python中,可以直接作用于 for in
    • 内部会自动调用迭代器对象,next
    • 会自动处理迭代完毕的错误

注意

  • 如果取出完毕,再继续取,则会报错:StopIteration
  • 迭代器一般不能多次迭代

判定

列表也是序列类型

in 和 not in,同样可以用于列表

用来判断元素是否存在于列表之中

比较

内建函数:cmp()

如果比较的是列表,则针对每个元素,从左到右逐一比较

  • 左 > 右 1
  • 左 == 右 0
  • 左 < 右 -1

在python3中不支持这种方式


比较运算符

== < >。。。。。

针对每个元素,从左到右逐一比较

排序

内建函数:sort()

可以对所有可迭代对象进行排序

语法:sorted(iterable, key=None,reverse=False)

参数:

  • iterable:可迭代对象
  • key:排序关键字,值为一个函数,此函数只有一个参数且返回一个值
  • reverse:控制升序降序,默认False,升序

返回值:一个已经排好序的 列表

列表方法 list.sort

语法:list.sort(key=None, reverse=False)

参数:

  • key:排序关键字,值为一个函数,此函数只有一个参数并且返回一个值用来比较
  • reverse:控制升序降序,默认False,升序

乱序

随机打乱一个列表

import random
...
random.shuffle(l)

反转

l.reverse()

l[::-1]

Python:列表类型的更多相关文章

  1. Python列表类型及常用操作

    Python列表类型 1.用途: 存放多个值,可以根据索引存取值 2.定义方式: 在[ ]内用逗号分割开多个任意类型的值 l=['yven','law','lyf'] #l=list(['yven', ...

  2. python列表类型

    列表类型简介 列表类型是一个容器,它里面可以存放任意数量.任意类型的数据. 例如下面的几个列表中,有存储数值的.字符串的.内嵌列表的.不仅如此,还可以存储其他任意类型. >>> L ...

  3. python列表类型中的陷阱

    在python中对列表使用重复运算符*进行操作时,只是简单的进行了浅复制,内部的结构并没有复制过来,所以下面的例子结果是这样的: >>> lists =[[]]*3 >> ...

  4. python容器类型:列表,字典,集合等

    容器的概念我是从C++的STL中学到的 什么是容器? 容器是用来存储和组织其他对象的对象. 也就是说容器里面可以放很多东西,这些东西可以是字符串,可以是整数,可以是自定义类型,然后把这些东西有组织的存 ...

  5. Python变量类型(l整型,长整形,浮点型,复数,列表,元组,字典)学习

    #coding=utf-8 __author__ = 'Administrator' #Python变量类型 #Python数字,python支持四种不同的数据类型 int整型 long长整型 flo ...

  6. Python基础(3) - 数据类型:3列表类型

    Python 列表是序列对象,可包含任意的Python数据信息,如字符串.数字.列表.元组等.列表的数据是可变的,我们可通过对象方法对列表中的数据进行增加.修改.删除等操作.列表用[]包括起来的. 列 ...

  7. python全栈开发_day5_字符串及列表类型

    一:字符串 1)优先掌握知识点. a=" 21j3:b12jk:b3j12:3bjk12 " #内置方法之strip print(a.strip(" ")) # ...

  8. python基础——4(数字、字符串、列表类型的内置方法介绍)

    目录 一.可变与不可变类型 二.数字类型 三.字符串类型 四.列表类型 一.可变与不可变类型 可变类型:值改变,但是id不变,证明就是在改变原值,是可变类型 不可变类型:值改变,id也跟着改变,证明产 ...

  9. 005 python 整数类型/字符串类型/列表类型/可变/不可变

    可变/不可变类型 可变类型 ID不变的情况下,值改变,则称之为可变类型,如列表,字典 不可变类型 值改变,ID改变,则称之为不可变类型,如 整数 字符串,元组 整数类型 int 正整数 用途就是记录年 ...

  10. Python 变量类型

    Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...

随机推荐

  1. 关于memset....我太难了

    众所周知memset是个清空数组的好东西 然而...它慢的要死 直接让我从30ms炸到1045ms 于是快乐tle .... 是我的错 所以以后还是手动清空 (我真快乐)

  2. 解决VS2013报错fopen、sprintf等函数安全的问题

    VS2013中使用fopen.sprintf等函数是会出现安全问题: error C4996: 'fopen': This function or variable may be unsafe. Co ...

  3. python之路之html

    def index(request): print request.POST print request.GET print request.FILES for item in request.FIL ...

  4. 第四十一篇 入门机器学习——Numpy的基本操作——聚合操作

    No.1. 对向量元素求和使用np.sum,也可以使用类似big_array.sum()的方式 No.2. 对向量元素求最小值使用np.min,求最大值使用np.max,也可以使用类似big_arra ...

  5. c#解析json字符串处理

    本文链接:https://blog.csdn.net/sajiazaici/article/details/77647625本文是全网第二简单的方法,因为我女票也发了一篇博客说是全网最简单的方法,我不 ...

  6. C++-POJ1017-Packets

    贪心算法,思路见代码 本来想搜索,结果有O(1)的算法,我佛了 其实每一种6x6的方案可以打表预处理,然后dp or search 但是既然可以贪心何乐而不为呢? #include <set&g ...

  7. 如何在linux安装ruby2.2.2+

    背景: 想搭建redis集群但是提示需要ruby2.2.2+ 直接使用yum安装 yum -y install ruby ruby-devel rubygems rpm-build 使用ruby -v ...

  8. Django组件总结

    Django组件介绍 分页器的使用 分页器在页面中非常常见,当数据库条数数据过多时,页面一次性显示不好看时,我们可以使用分页器,将数据分几次显示. 1.1 数据库内插入大量数据 Booklist=[] ...

  9. [爬坑日记] 安卓模拟器1903蓝屏 没开hyper-v

    先说解决方案: 我在升级完1903之后短短几个小时蓝屏了两次 还是不同原因,不由得开始怀疑这个版本的稳定性,随后发现只有启动安卓模拟器的时候必然蓝屏(还有一次蓝屏实在安装驱动的时候) 经过百度得知需要 ...

  10. CSS--box

    width is content width height is content height set margin and padding zero leads box to the same wi ...