Python内置了三种高级数据结构:list,tuple,dict

list:数组,相同类型的元素组成的数组

tuple:元组,相同类型的元素组成的数组,但是这里有限定条件(长度是固定的,并且值也是固定的,不能被改变)

dict:字典,k-v结构的

list数组

1,初始化和遍历list

#!/bin/python

a = [1, 2, 3]
print(a, type(a)) for i in a:
print(a)

输出:

[1, 2, 3] <class 'list'>
[1, 2, 3]

2,list添加和删除元素

a = [1, 2, 3]
a.append(4)
print(a) # 1,2,3,4
a.insert(1, 11)
print(a) #1,11,2,3,4

解释:append是在末尾添加元素,insert(n, data)在下标n的位置添加data,原先下标n的元素依次往后移动1位

a = [1, 2, 3, 4]
a.pop()
print(a) # 1,2,3 a = [1, 2, 3, 4]
a.pop(1)
print(a) # 1,3,4

pop()默认将最后一个数值pop出来,pop(n)是将下标为n的位置元素pop出来(这里如果n大于最大下标,python会抛出异常out of range)

整个将list清空掉

a = [1, 2, 3]
del a
print(a)

这里会报错:a is not defined,表名del a这个操作不是仅仅清空a的元素,而且把a本身从程序中删除掉

3,查找元素(根据key和value来查找)

判断a是否包含某个key值,要使用:key <= len(a) - 1

a = [1, 2, 3, 4]
if 3 <= len(a) - 1:
print('a[3] exist') if 4 <= len(a) - 1:
print('a[4] exist')
else:
print("a[4] does not exist")

输出:

a[3] exist
a[4] does not exist

元素查找:a.count(value)

a = [1, 2, 3, 4]
print(a.count(1)) #
print(a.count(5)) #

count返回a中包含元素value的次数

元素查找:a.index(value)

a = [1, 2, 3, 4]
print(a.index(1)) #0
print(a.index(0))

index是返回value在a中所在的下标,如果value没在a中出现,则python抛出异常:{value} is not in list

4,更新某个key值

a = [1, 2, 3, 4]

if 3 <= len(a) - 1:
a[3] = 100
else:
print("a[3] does not exist") print(a, len(a)) #1,2,3,100

更新某个key的value需要根据下标来更新,但是必须确定该key是未越界的,即不能大于len(a) - 1

5,切片

a = [1, 2, 3, 4, 5]

print(a[:]) #[1, 2, 3, 4, 5]

print(a[1:2]) #[2]
print(a[1:-1]) #[2,3,4]
print(a[1:0]) #[]
print(a[1:]) #[2,3,4,5] print(a[:2]) #[1,2]
print(a[:-1]) #[1,2,3,4]
print(a[:0]) #[] print(a[-3:]) #[3,4,5]
print(a[-3:-1]) #[3,4]
print(a[-3:0]) #[]

理解:a[n:m],从下标为n的元素开始从左往右数,数到下标为m-1的元素停止

理解n或者m为负值,则他实际计算时遵循的公式是:len(a) + n或者len(a) + m

比如a=[1,2,3,4,5], a[-1:]此处n为-1,实际开始下标为:len(a) + n = 5 + n = 5 - 1 = 4

6,其它相关函数

辅助函数1:enumerate

a = [1, 2, 3, 4, 5]

for i, v in enumerate(a):
print(i, v)

辅助函数2:count(计算list中包含某个元素的次数)

辅助函数:排序相关,sort,reverse

关于list的更详尽的内容参考:http://www.runoob.com/python/python-lists.html

===================tuple================

元组:元组的初始定义就决定了它的长度,也决定了它的值。无法修改所有元素,也无法改变它的长度。

import os

a = (1, 2, 3)

print(len(a))
print(a[2])
#print(a[4]) #out of range
#a[0] = 3 #'tuple' object does not support item assignment
#a.append(5) #no attribute os._exit(0)

输出结果:

3
3

====================dict==================

操作1:初始化和遍历dict

1.1,初始化,并查看变量的类型

a = {"a":"", 'b':"", "c":""}

print(a, type(a))

输出:

{'a': '', 'c': '', 'b': ''} <class 'dict'>

1.2,遍历dict元素

a = {"a":"", 'b':"", "c":""}

for k, v in a.items():
print(k, v)

输出:

a 1
b 2
c 3

1.3,获取某个key的值

get(key):获取dict中key对应的元素值

a = {"a":"", 'b':"", "c":""}

print(a.get("a"))
print(a.get('d'))

输出:

1
None

注意,以上操作中get('d')是没有抛出异常的,意味着使用get总是安全的,只是需要检查返回值是否为None。

a = {"a":"", 'b':"", "c":""}
print(a.get('d') == None) #True

操作2:新增/更新元素

a = {"a":"", 'b':"", "c":""}

#update
a["a"] = "a"
print(a) #insert
a['d'] = ''
print(a)

输出:

{'b': '', 'c': '', 'a': 'a'}
{'b': '', 'c': '', 'd': '', 'a': 'a'}

更新dict(a)的a对应的值:a['a'] = 'a'

新增,直接使用赋值语句即可

3,删除某个元素

3.1,删除某个key

a = {"a":"", 'b':"", "c":""}

del a['a']
print(a) a.pop('a') #效果和del相同

输出结果:

{'c': '', 'b': ''}

3.2,rest整个dict为空dict{},但不回收空间

a = {"a":"", 'b':"", "c":""}

a.clear()
print(a) #{}

clear函数用来reset某个dict为{}

3.3,删除整个dict,并回收空间

a = {"a":"", 'b':"", "c":""}

del a
print(a) #a is not defined

del和之前的list数组,操作结果一样的

4,检查某个key是否存在

a = {"a":"", 'b':"", "c":""}

print('a' in a) #True
print('d' in a) #False
print('d' not in a) #True

判断某个key是否存在,使用in语句:key in dict

判断某个key不存在,使用not in语句:key not in dict

5,主题:深拷贝和浅拷贝

浅拷贝

a = {"a":"", 'b':"", "c":""}

b = a
print(b) a["a"] = "abc"
print(b)

输出:

{'c': '', 'a': '', 'b': ''}
{'c': '', 'a': 'abc', 'b': ''}

可以看到,a的元素值改变时,b也跟随改变了。这说明,a和b其实是同一个dict,只是名称不同而已。

我们来看赋值语句:b=a,这个赋值代表浅拷贝,实际完成的效果是引用。

对应的是深拷贝,用dict中自带的copy函数来完成。

a = {"a":"", 'b':"", "c":""}

b = a.copy()
print(b) a["a"] = "abc"
print(b)

输出:

{'b': '', 'a': '', 'c': ''}
{'b': '', 'a': '', 'c': ''}

可以看到a的改变并为在b的print体现。

6,其它辅助函数

6.1,update

a = {"a":"", 'b':"", "c":""}

b = {"a": "b1", "d":"",}

a.update(b)
print(a)

输出:

{'b': '', 'a': 'b1', 'd': '', 'c': ''}

如果不管a中是否有b中key,都将b的key来替代a中key;对于a中存在,b中不存在的,则保留。

6.2,获取所有的key列表,及其value的列表

a = {"a":"", 'b':"", "c":""}

print(a.keys())
print(a.values())

注意这里返回的类型分别是dict_keys,dict_values类型,而不是简单的list。同时也可以看到,顺序和初始化a的顺序是不同的,但是这两个函数的返回值的顺序,和他们在a中出现的顺序是对应的。

dict_keys(['c', 'b', 'a'])
dict_values(['', '', ''])

20 【python】入门指南:常用数据结构的更多相关文章

  1. Python 入门之常用运算符

    Python 入门之常用运算符 Python中的运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算 1.常用运算符: (1)算数运算符: + - * / %(取余(模) ...

  2. Docker 入门指南——常用命令

    前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...

  3. 【python基础】--常用数据结构

    list tuple dict set四种常用数据结构 list list 有序的集合,可以随时添加.删除其中元素值; 支持list嵌套模式, >>> p = ['a','b']&g ...

  4. Python入门指南(超详细)

    Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑科技.本文主要针对的读者是: 毫无 ...

  5. Python机器视觉编程常用数据结构与示例

    本文总结了使用Python进行机器视觉(图像处理)编程时常用的数据结构,主要包括以下内容: 数据结构 通用序列操作:索引(indexing).分片(slicing).加(adding).乘(multi ...

  6. Python—字符串和常用数据结构

    目录 1. 字符串 2. 列表 2.1 列表的增删改查 2.2 列表的切片和排序 2.3 生成式语法 3. 元组 4.集合 5. 字典 5.1 字典的增删改查 5.2 字典的常见操作 序言:这一章我们 ...

  7. Python 入门指南

    Release: 3.4 Date: March 29, 2014 Python 是一门简单易学且功能强大的编程语言. 它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程. Pyt ...

  8. python学习之常用数据结构

    前言:数据结构不管在哪门编程语言之中都是非常重要的,因为学校的课程学习到了python,所以今天来聊聊关于python的数据结构使用. 一.列表 list 1.列表基本介绍 列表中的每个元素都可变的, ...

  9. 2018-06-29 "西游记"主题Python入门示例尝试-数据结构 5.1-5.1.2

    (见前: 中文代码示例视频演示Python入门第五章 数据结构 仍然基于官方文档, 欢迎建议(尤其是如何取材). 5. Data Structures - More on Lists 列表详述 > ...

  10. 24 【python入门指南】class

    一.类 1.1,构造函数,析构函数 #!/bin/python class dog(): def __init__(self, age, name): self.age = age self.name ...

随机推荐

  1. System.Types.hpp(77): E2029 'TObject' must be a previously defined class or struct

    System.Types.hpp System.Types.hpp(77): E2029 'TObject' must be a previously defined class or struct ...

  2. Office2019都有哪些强大功能

    前阵子是微软一年一度的Ignite大会.而其中最引人注目.也是与我们一般人最息息相关的消息,当然是Office 2019的正式发布. 尽管Office 2019所更新的功能,对于Office 365的 ...

  3. 机器学习进阶-图像特征harris-角点检测 1.cv2.cornerHarris(进行角点检测)

    1.cv2.cornerHarris(gray, 2, 3, 0.04)  # 找出图像中的角点 参数说明:gray表示输入的灰度图,2表示进行角点移动的卷积框,3表示后续进行梯度计算的sobel算子 ...

  4. MySQL数据库备份工具mysqldump的使用(转)

    说明:MySQL中InnoDB和MyISAM类型数据库,这个工具最新版本好像都已经支持了,以前可能存在于MyISAM的只能只用冷备份方式的说法. 备份指定库: mysqldump -h127.0.0. ...

  5. R-CNN 学习记录

    CNN是一个运用卷积神经网络进行图片分类的开山之作.RCNN是第一个把图片分类和目标检测连接起来的作品. RCNN主要解决的问题是: 1.怎样用深度神经网络进行目标定位:2.怎样用小批量的标注数据来训 ...

  6. NSMapTable

    跟NSDictionary用法差不多,不过区别是NSMapTable可以设置内存选项,例如可以设置key跟value的内存属性(weak/strong),从而避免内存泄露. 例如这个+ weakToW ...

  7. HBASE小结--待续使用

    构建在HDFS之上的分布式,面向列的存储系统,使用zookeeper做协同服务,在需要实时读写和随机访问超大规模数据集的时候使用 缺点:非关系型,不支持SQL,数据类型单一(字符串,无类型),之支持单 ...

  8. linux 3.10 tcp的accept测试

    net.ipv4.tcp_abort_on_overflow 为 0 有个兄弟跟我说accept的时候,如果故意不去accept,那么客户端connect的时候,一开始很快,后来就很慢: connec ...

  9. monkeyrunner学习笔记

    前面部分内容转自http://blog.csdn.net/zm2714/article/details/7980634 Android自动化测试之Monkeyrunner使用方法及实例 目前andro ...

  10. EUREKA原理总结

    Eureka高可用架构 https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance 上图中主要的名称说明: Register:EurekaCli ...