更新时间:2019.08.10

更新内容:

  1. “2.14加入sorted()函数”
  2. “2.3”加入一种删除元素的方法
  3. ”二、字典“新增1.5,字典的常用操作
  4. 1.1字典的创建增加四种创建方式
  5. 增加“三、元组”的部分内容

一、list(列表)

list作为Python中最常用的数据结构之一,与其他编程语言的数组有相似的特点,但是它具有着更为强大的功能,接下来将详细地为大家介绍一下list的所有操作。

(注:tuple元组类型与list类似,但是tuple的元素不能修改;set集合与list也类似,但是集合中的元素是无序的,且会自动除去重复元素)

1. list列表的创建

  • 创建一个列表(不赋初值):
a = []
a = list()
  • 创建一个列表,并对其赋初值
a = [1,2,3]
  • 列表更高级的创建方法——用表达式创建
a = [i for i in range(1, 11)]
#创建一个元素分别为1,2,...10的列表 a = [i for i in range(1, 11) if i % 2 == 0]
#创建一个1-10,且元素为偶数的列表
  • 用list()函数将其他(可迭代)数据转换为列表
list('ab c')   #列表为['a', 'b', ' ', 'c']

2. list列表的常用操作

2.1 列表的索引

直接用中括号[ ]索引其下标即可,或用for循环遍历所有的值

  • 注意,当下标为负数时则代表从后往前所以(或理解为长度+负下标),即-1代表最后一个元素,-2代表倒数第2个元素
a = [1,2,3]
print(a[1]) #输出2,因为一个list列表的下标从0开始,按照0, 1, 2,...的顺序排列
print(a[-1]) #输出3
for i in a:
print(i) #输出1 2 3
  • 注意,字典dict中可以用.keys()和.values()分别遍历dict的键和值
  • 字典dict中.get()函数可以返回指定键的值,相比于dict[“key”]访问的好处是如果字典中没有指定的key则返回None,而不会直接报错
a = {"one":1, "two":2}
for i in a.values():
print(i) #输出1 2
a.get(key, default) #default_value不设置的话默认为None,设置的话即如果找不到则返回default设定的值

2.2 列表的分片操作(slice)

用[左边界下标:右边界下标:步长]截取list中特定的段,注意是左闭右开的区间,即包含左边界,但是不包含右边界

其中:步长可以省略,默认为1。步长即每次截取一个元素,到下一次截取元素距离几个元素(默认为1,即紧挨着截取)

  • 特别注意,冒号:的左右两侧都可以不写,其中左侧默认为0,即list第一个数据,右侧默认为数据个数+1,即list的最后一个数据
  • 左边界和右边界也可以超出list的范围,最长只能截取到list的范围内
  • 一般情况下,左边界<=右边界。若左边界>右边界,则要设置步长为负数,否则输出为空(此情况也就是从右向左截取)
a = [1,2,3,4,5]
print(a[1:3]) #输出[2,3]
print(a[:4]) #输出[1,2,3,4]
print(a[2:]) #输出[3,4,5]
print(a[2:10] #输出[3,4,5]
print(a[0:3:2]) #输出[1,3]
print(a[2:0:-1]) #输出[3,2]

2.3 列表删除元素

  • 用del函数删除列表指定位置的元素

    del(list1[index] #删除list1中index位置的元素(index也可以表示一个范围,如[1, 3])
  • 用pop函数剔除队尾元素,并将其返回

    a = list1.pop(index) #将list1中index位置元素剔除并赋值给a,默认删除最后一个元素
  • 用remove函数删除列表中值为指定值的元素

    list1.remove(value) #删除list中值为value的元素
  • 用clear函数彻底清空列表全部内容

    list1.clear() #清空list1的全部内容
  • 用分片赋值空列表的办法删除元素

    list1 = [1, 2, 3, 4, 5]
    list1[2:] = []
    list1 # 输出[1, 2]
  • 注意:集合中只有remove和discard,其中discard删除不存在的元素不会报错,但是remove与list中一样,会报错

2.4 列表的拼接

  • 可以简单的用 + 将两个列表连接起来
a = [1, 2]
b = [3]
c = a + b
那么c = [1, 2, 3]
  • 用extend函数拼接两个列表
list1.extend(list2) #在list1后面接上list2

2.5 列表的重复

可以将一个列表直接乘一个数字n获得n倍重复后的列表,相当于n个这样的列表连接起来

a = [0]
b = a * 5
那么b = [0, 0, 0, 0, 0]

2.6 元素成员判断(判断一个元素是否存在一个列表中)

a = [1, 2, 3, 4, 5]
b = 2
print(b in a)
# 输出True print(b not in a)
# 输出False

若in前面的元素在列表中则运算值为真;否则为假

not in与in刚好相反

2.7 求列表的长度

len([1, 2, 3])   #列表的长度为3

2.8 求列表的最大、最小值

max([1, 2, 3])   #最大值为3

2.9 在列表中插入元素

  • append函数在队尾插入元素
list1.append(5)  #在list1的最后插入元素5

  • insert函数在任意位置插入元素
list1.insert(index, data) #在指定位置(index处)插入元素data

  • extend()函数在尾部扩展一个新列表
list1 = [1]
list1.extend([2, 3]) # list1为[1, 2, 3]
  • 注意,集合set中没有append和insert,取代的是add()
set1.add(2) #向集合中加入元素2

2.10 反转一个列表

list1.reverse() #翻转整个列表,即第一个与最后一个互换,第二个与倒数第二个互换....

2.11 计算列表中指定元素x的个数

times = list.count(x) 

2.12 查找列表中指定元素的位置

语法:index(X) 查找list中元素X的位置(若重复出现,则以第一次出现的为准)

a = [1, 2, 3, 4, 5]
a.index(2) #结果为1

2.13 (浅)复制一个list

list2 = list1.copy() #将list1的内容复制给list2
#注意这里与list2 = list1是有区别的,python中列表的直接赋值是一个传址操作,即改变list2的值也会同时影响list1的值
#但是copy函数进行的是一个传值操作,即改变list2的值对list1无影响
#浅复制的意思是若列表中嵌套一个列表,则对内部的列表仍然是传址复制

2.14 列表的排序:sort方法与sorted()函数

  1. sort方法

参数:

  • key :主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。(https://www.runoob.com/python/att-list-sort.html)
  • reverse:是否降序(True为降序,不指定该参数为升序)
list1 = [(1,6),(3,4),(2,5)]
list1.sort(key=lambda x:x[1], reverse=True) # 根据第二个元素,降序排列
# 输出:[(1, 6), (2, 5), (3, 4)]
  1. sorted()函数:

sort方法功能类似,但是sorted()函数有返回值,返回的是排序后的结果。


二、字典(dict)

字典与列表最大的区别就是字典强调的是“键值对”,key与value一一对应,字典中的存放顺序并不重要,重要的是“键”和“值的对应关系”

1.1 字典的创建(字典中每一对数据都是“键”和“值”相对应的)

a = {key1:value1, key2:value2}  # 第一种

a = dict(key1=value1, key2=value2)  # 第二种,注意此种情况下键必须为字符串

a = {}
a[key1] = value1
a[key2] = value2 # 第三种 a = dict([(key1, value1), (key2, value2)]) # 第四种
a = dict(zip([key1, key2], [value1, value2])) # 第四种衍生,使用zip函数把键列表和值列表打包成键值对一一对应的元组(即第四种方法) a = dict.fromkeys([key1, key2], value) # 第五种,这种情况适用于多个键对应相同值的情况 a = {x: x**2 for x in [1, 2, 3]} # 第六种,字典推导表达式

1.2 字典的索引

dict1[key]
#key是字典的键,返回的是对应的值value dict1.get(key)
#get方法获取键的值,若键不存在,则返回设定的默认值default(默认为None)--与`[key]`获取值的区别是,get方法遇到键不存在的时候会返回设定值,而直接索引遇到键不存在时会报错“missing-key”

1.3 字典的遍历

for i in dict1.keys():
print(i, dict1[keys]) # 遍历字典中所有的键,并输出键值对 for i in dict1: # 该方法与上述方法等价
... for keys, values in dict1.items(): # 遍历字典中所有的键值对
...

1.4 字典的排序

对字典的排序有两种方法:

1.借助.keys()方法和list()函数将键提取成list,对list排序后输出

# Example
D = {'a':1, 'c':3, 'b':2}
D1 = list(D.keys())
D1.sort()
for i in D1:
print(i, D[i]) # 输出:
# a 1
# b 2
# c 3

2.借助内置的sorted()函数可对任意对象类型排序,返回排序后的结果

tips:对于sorted(字典)来说,返回的是排序好的keys(以list的形式)

# Example
D = {'a':1, 'c':3, 'b':2}
for i in sorted(D):
print(i, D[i]) # 输出:
# a 1
# b 2
# c 3

1.5 字典的常用操作

操作 解释
.keys() (方法)获取所有键
.values() (方法)获取所有值
.items() (方法)获取所有“键+值”元组
len() 获取键值对的数量
.get(key, default) (方法)获取键的值,若键不存在,则返回设定的默认值default(默认为None)--与[key]获取值的区别是,get方法遇到键不存在的时候会返回设定值,而直接索引遇到键不存在时会报错“missing-key”
dict1.update(dict2) (方法)合并两个字典

三、元组(tuple)

元组类似于列表,是一个基于位置的有序对象集合,但是元组一旦创建之后就不能更改,因此列表中修改元素的操作对于元组都不适用。

  • 为什么要使用元组?

    元组和其他不可变量类似于其他语言中“常量”的声明,它的不可变性提供了某种一致性,这样可以确保元组在程序中不会被另一个引用修改。

    Mark Lutz——《Learning Python》中文版

1.1 元组的创建

t = (1, 2, 3)
t = tuple([1, 2])
...

特别说明,当元组中仅有一个元素时,要以逗号结尾。这是因为小括号同样可以把表达式括起来,为了与此区分开来,因此在单一对象元组是要在括号内加一个,用以区分。

t = (1)  # 表达式
t = (1,) # 元组

1.2 元组的方法

由于元组并不能够像列表一样修改,因此元组并没有特别多的方法

>>> t = (1, 2, 3, 1, 2)

# index方法:根据元素找到其位置
>>> t.index(1, 2) # 寻找第2个元素1的位置
3 # count方法:返回元素的个数
>>> t.count(2)
2

1.3 namedtuple -有名元组

python标准库的collections模块提供了namedtuple有名元组,实现了同时支持使用序号和属性名访问。有名元组的属性来自类,因此并不与字典的键完全一样,但他们方便记忆:

>>> from collections import namedtuple
>>> A = namedtuple('tt', ['a','b','c'])
>>> bon = A('d','e','f')
>>> bon
tt(a='d', b='e', c='f') # namedtuple的访问:
>>> A = namedtuple('tt', ['a','b','c'])
>>> bon = A('d','e','f')
>>> bon
tt(a='d', b='e', c='f')

四、集合(set)

Python中的集合类似于数学中的集合概念,它是一组无序、不可重复数据的组合。集合用{ ...}创建,某种程度上可以把集合看作是没有值的字典。

1.1 集合的创建

s = {'s', 'e', 't'}
s = set(['a, b, c, d, e']) #注意,python中{}为空字典类型,并非空集合。空集合需要用set()函数创建
s = set() #创建一个空集合 #集合也可以用表达式(推导)的方式创建
{x * 2 for x in 'abc'} #{'aa', 'bb', 'cc}
{x **2 for x in range(1,5)} #{1, 4, 9, 16}

1.2 集合的常用操作

set1 `&` set2 #交运算
set1 `|` set2 #并运算
set1 `-` set2 #差运算,set1减去set1 `&` set2部分

1.3 集合的常用方法

set1.add('x')  #添加元素。注意:集合中只能包含可哈希的对象,即list,dict都不能嵌入到集合中
set1.union(...) #取并集,效果等同于 | ,但是括号里可以是list,tuple,其他dict甚至是dict
set1.intersection(...) #取交集,同上
set1.issubset(set2) #判断set1是否是set2的子集

1.4 集合的不可变性与frozenset

注意:集合只能包含不可变的(可哈希化的)对象类型。因此,列表和字典甚至另一个集合都不能作为集合的元素,但是元组可以(因为元组是不可变的)。

由于集合本身是可变的,因此,要想在一个集合中嵌入另一个集合,需要用frozenset创建一个不可变的集合。

a = frozenset([1, 2, 3])
b = set([1, 2, a]) #b为{frozenset({1, 2, 3}), 1, 2}

1.5 为什么使用集合?

  • 由于集合内元素是不重复的,因此可以将list或其他类型的数据转换成集合,从而过滤掉其中的重复元素
  • 通过集合的交并补等操作,可以比较列表、字符串以及其他可迭代对象的差异。

Python中list(列表)、dict(字典)、tuple(元组)、set(集合)详细介绍的更多相关文章

  1. Python学习三|列表、字典、元组、集合的特点以及类的一些定义

    此表借鉴于他人 定义 使用方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,'abc',4.56,['inner', ...

  2. Python数据结构:列表、字典、元组、集合

    列表:shoplist = ['apple', 'mango', 'carrot', 'banana']字典:di = {'a':123,'b':'something'}集合:jihe = {'app ...

  3. Python基础 之列表、字典、元组、集合

    基础数据类型汇总 一.列表(list) 例如:删除索引为奇数的元素 lis=[11,22,33,44,55] #第一种: for i in range(len(lis)): if i%2==1: de ...

  4. Python基础 数据类型 (字符串、列表、字典、元组、集合、堆、栈、树)

    数据类型有整型.布尔.字符串.列表.字典.元组.集合.堆.栈和树. 1.整型: 整型就是数字 数字表示 python2 64位机器,范围-2^63~2^63-1 超出上述范围,python自动转化为l ...

  5. Python3中列表、字典、元组、集合的看法

    文首,我先强调一下我是一个弱鸡码农,这个随笔是在我学习完Python3中的元组.字典.列表,集合这四种常见数据的数据类型的一些感想,如果有什么不对的地方欢迎大家予以指正.谢谢大家啦 回归正题:这篇随笔 ...

  6. Python中几种数据结构的整理,列表、字典、元组、集合

    列表:shoplist = ['apple', 'mango', 'carrot', 'banana']字典:di = {'a':123,'b':'something'}集合:jihe = {'app ...

  7. python中的列表和字典

    列表和字典的区别: 列表是有序排列的一些物件,而字典是将一些物件(键)对应到另外一些物件(值)的数据结构; 应用场景: 字典 各种需要通过某个值去查看另一个值的场合,也就是一个虚拟的“查询表”,实现方 ...

  8. python中的列表和字典(二)

    三. 字典以及相关使用 1. 字典的定义 dict{} 2. 字典特征:字典是无序的,key-value键值对形式,key值不重复 3. 字典的赋值:dictA = {keyA: valueA, ke ...

  9. python(字符串、列表、字典、元组、集合)的常用内置方法

    一.字符串: lis='my name is maple' res=lis.count('m')#计算字符串内相同字符的个数 print(res) lis='my name is maple' res ...

  10. python中的列表和字典(一)

    一. 列表 1. 列表的定义 [] 2. 列表特征:有序列表,可以包含任意内容,可以重复 3. 列表的赋值(顺序赋值):listA = [A, B, C] 4. 列表的取值:list[index]  ...

随机推荐

  1. Event loops秒懂

    Event loops秒懂 简介 JS是一种单线程脚本语言,为什么要设计成单线程? 举例说明,假设JS是多线程脚本语言,A线程修改了DOM,B线程删除了DOM,一旦B线程先执行完,DOM被删除了,A线 ...

  2. 【Weiss】【第03章】练习3.17:懒惰删除

    [练习3.17] 不同于我们已经给出的删除方法,另一种是使用懒惰删除的方法. 为了删除一个元素,我们只标记上该元素被删除的信息(使用一个附加的位域). 表中被删除和非被删除的元素个数作为数据结构的一部 ...

  3. linux入门系列18--Web服务之Apache服务2

    接上一篇文章,在了解Apache基本配置以及SELinux相关知识后,继续演示Apache提供的虚拟主机功能以及访问控制方式. 如果还没看上一篇的建议先查看后再来,上篇文章"linux入门系 ...

  4. go第三方常用包

    配置 go-ini/ini 用于读取 ini 格式配置文件. 地址:https://github.com/Go-ini/ini tomal 用于读取 conf 格式配置文件. 地址:https://g ...

  5. java-TreeMap

    2019-12-17 10:34:55 //返回小于key的第一个键: K lowerKey(K key); //返回大于key的第一个键: K higherKey(K key); //返回小于等于k ...

  6. 如何让Docker镜像飞起来

    前言 Docker用起来非常爽,尤其是用于DevOps实践时.但是,当你在国内或者本地拉取镜像时,经常会碰到各种“便秘”——要么镜像拉取缓慢,要么时断时连,要么连接超时! 当我们的镜像又比较大时(比如 ...

  7. OpenCV-Python 理解特征 | 三十六

    目标 在本章中,我们将尝试理解什么是特征,为什么拐角重要等等 解释 你们大多数人都会玩拼图游戏.你会得到很多小图像,需要正确组装它们以形成大的真实图像.问题是,你怎么做?将相同的理论投影到计算机程序上 ...

  8. OpenCV-Python 霍夫圈变换 | 三十三

    学习目标 在本章中, 我们将学习使用霍夫变换来查找图像中的圆. 我们将看到以下函数:cv.HoughCircles() 理论 圆在数学上表示为(x−xcenter)2(y−ycenter)2=r2(x ...

  9. 使用PyTorch进行迁移学习

    概述 迁移学习可以改变你建立机器学习和深度学习模型的方式 了解如何使用PyTorch进行迁移学习,以及如何将其与使用预训练的模型联系起来 我们将使用真实世界的数据集,并比较使用卷积神经网络(CNNs) ...

  10. 移动端H5调试

    背景:开发PC页面的时候使用chrome浏览器的开发者工具,可以很容易的捕获到页面的dom元素,并且可以修改样式,方便调试:但是手机上却很麻烦,因为手机上没有办法直接打开开发者工具查看元素.其实可以通 ...