Python基本数据结构

数据结构:通俗点儿说,就是存储数据的容器。这里主要介绍Python的4种基本数据结构:列表、元组、字典、集合;

格式如下:

  • 列表:list = [val1, val2, val3, val4],用中括号;
  • 元组:tuple = (val1, val2, val3, val4),用小括号;
  • 字典:dict = {key1: val1, key2: val2, key3: val3},用大括号;
  • 集合:set = {val1, val2, val3, val4},用大括号;

1.列表

list = [val1, val2, val3, val4],列表最显著的特征是:

  • 列表中每个元素都是可变的;
  • 列表中元素是有序的,即每个元素都有一个位置;
  • 列表可以容纳Python的任何对象;

接下来看列表的增删改查:

增:

or_list = [1, "abc", 2.51]
or_list.append("JavaScript") # append()方法在列表末尾追加元素(以整体形式追加)
or_list.insert(0, "Python")
print("or_list is: ", or_list)

用insert()方法可以实现在列表中增加元素。insert()方法需要写明增加在哪个位置和增加的内容,新元素的实际位置是在指定位置元素之前的位置;如果指定的位置不存在,默认会增加在列表末尾;

or_list = [1, "abc", 2.51]
or_list[0:0] = [9] # [0:0]是指在列表中的第1个位置插入新元素
or_list[3:3] = "a" # [3:3]是指在列表中的第4个位置插入新元素
print("or_list is: ", or_list)

上面的这两种方法都是天价单个元素,除了添加单个元素,还可以添加多个元素,用extend()方法来实现:

or_list = [1, "abc", 2.51]
ex_list = ["Python", 23, "game"]
or_list.extend(ex_list) # extend()方法用于在列表末尾一次性追加另一个列表的多个值
print("or_list is: ", or_list)

删:

or_list = [1, "abc", 2.51]
or_list.remove(1)
print("or_list is: ", or_list)

删除列表元素除了remove()方法外,也可以用del关键字来声明:

del or_list[0:2]    # [0:2]删除第1个和第2个位置元素
print("or_list is: ", or_list)

改:

lst = [1, "abc", 2.51]
lst[0] = "start"
lst[2] = 777
print("lst is: ", lst)

如果想要替换掉列表中的某个元素,可以直接给列表某位置的元素重新赋值,lst[2]指lst列表中的第3个元素;

查:

列表的索引与字符串的索引类似,同样是分正反两种索引方式,可以从后往前,也可以从前往后所以,比如:

src_list = [1, "abc", 2.51]
# 输出第2个位置和倒数第1个位置的元素
print(src_list[1], src_list[-1]) # 输出第1、2个元素和第2到最后一个元素
print(src_list[:2], src_list[1:])

但是如果想查看某个元素的位置,就需要使用下面这种方式:

src_list = [1, "abc", 2.5, 360]
print(src_list.index(2.5))

这里需要注意的是,如果index()查找的元素不在列表里面,程序会产生ValueError:"xxx" is not in list

2.元组

tuple = (val1,val2,val3,val4),Python中的元组与列表类似,不同之处在于元组不可修改,类似于稳定版的列表,因此在列表中可以使用的增删改的方法在元组中是不可以使用的,但是可以对元组中的元素进行索引,和列表类似。

tup = (1, 2.5, "hello", 26, "abc")
print(tup[0])
print(tup[1])
print(tup[2])
print(tup.index(26))
print(tup.index("hello"))

同样的,index()方法查找的元素不在元组中时,会产生ValueError异常。

3.字典

dict = {key1:val1,key2:val2},编程世界中的很多概念都源自于生活,字典也是。这种数据结构如我们使用的字典一样,通过"名称->内容"来构建,在Python中每个元素都是带有冒号的kye与value的对应关系,习惯称之为键值对。字典的特征如下:

  • 字典中的元素必须时键值对的形式;
  • 键(key)不可以重复,而值(value)可以重复;
  • 键不可变,无法修改;值可以修改,可以是任何对象;

即使字典中有重复的键,输出时也只会出现一次,比如:

d = {"A": "art", "B": "blog", "C": "ascii", "C": "cute", "C": "Java"}
print(d) # {'A': 'art', 'C': 'Java', 'B': 'blog'}

接下来看字典的增删改查:

增:

字典中没有像列表那样的insert()方法,但是可以通过下面这种方式插入元素,元素默认插入在最后一个位置。

d = {'A': 'art', 'B': 'Java', 'C': 'blog'}
d["D"] = "dictionary"
print(d)

再列表中可以通过extend()方法来为列表增加多个元素,在字典中可以使用update()方法来实现添加多个元素;

d = {'A': 'art', 'B': 'Java', 'C': 'blog'}
d.update({"D": "dictionary", "E": "example"})
print(d)

删:

在字典中删除某个元素,也可以使用del关键字:

d = {'A': 'art', 'B': 'Java', 'C': 'blog'}
del d["A"]
print(d)

需要注意的是,虽然字典是用大括号,但删除时依然使用中括号。

改:

如果要修改字典里的元素,直接重新给键赋值即可:

d = {'A': 'art', 'B': 'Java', 'C': 'blog'}
d["B"] = "beyond"
print(d)

查:

在字典中进行查询时,跟删除一样需要通过字典的键来,也就是说对字典的查询和删除都是通过键来的:

d = {'A': 'art', 'B': 'Java', 'C': 'blog'}
d["B"]
print(d["B"])

4.集合

set = {val1,val2,val3,val4},集合的概念有点接近数学上的集合。每个集合中的元素时无序的、不重复的任何Python对象,我们可以通过集合去判断数据的从属关系,有时还可以通过集合把数据结构中重复的元素过滤掉。集合不可以被切片也不能被索引,除了做集合运算外,集合元素可以被添加和删除。

s = {9, 3, 4, 6, 4, 2, 8}
s.add(5) # 新增元素5
s.discard(4) # 删除元素4 print(s) # 输出的集合会从小到大排列,并取重:{2, 3, 5, 6, 8, 9}

Python 基本数据结构的更多相关文章

  1. python 与数据结构

    在上面的文章中,我写了python中的一些特性,主要是简单为主,主要是因为一些其他复杂的东西可以通过简单的知识演变而来,比如装饰器还可以带参数,可以使用装饰类,在类中不同的方法中调用,不想写的太复杂, ...

  2. [0x00 用Python讲解数据结构与算法] 概览

    自从工作后就没什么时间更新博客了,最近抽空学了点Python,觉得Python真的是很强大呀.想来在大学中没有学好数据结构和算法,自己的意志力一直不够坚定,这次想好好看一本书,认真把基本的数据结构和算 ...

  3. Python -- 堆数据结构 heapq - I love this game! - 博客频道 - CSDN.NET

    Python -- 堆数据结构 heapq - I love this game! - 博客频道 - CSDN.NET Python -- 堆数据结构 heapq 分类: Python 2012-09 ...

  4. python实现数据结构单链表

    #python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...

  5. 《用Python解决数据结构与算法问题》在线阅读

    源于经典 数据结构作为计算机从业人员的必备基础,Java, c 之类的语言有很多这方面的书籍,Python 相对较少, 其中比较著名的一本 problem-solving-with-algorithm ...

  6. 用Python实现数据结构之二叉搜索树

    二叉搜索树 二叉搜索树是一种特殊的二叉树,它的特点是: 对于任意一个节点p,存储在p的左子树的中的所有节点中的值都小于p中的值 对于任意一个节点p,存储在p的右子树的中的所有节点中的值都大于p中的值 ...

  7. (python数据分析)第03章 Python的数据结构、函数和文件

    本章讨论Python的内置功能,这些功能本书会用到很多.虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的. 我们会从Python最基础 ...

  8. python的数据结构分类,以及数字的处理函数,类型判断

    python的数据结构分类: 数值型 int:python3中都是长整形,没有大小限制,受限内存区域的大小 float:只有双精度型 complex:实数和虚数部分都是浮点型,1+1.2J bool: ...

  9. 转 Python常见数据结构整理

    http://www.cnblogs.com/jeffwongishandsome/archive/2012/08/05/2623660.html Python常见数据结构整理 Python中常见的数 ...

随机推荐

  1. 【转载】四元数-Quaterion

    原文:四元数-Quaterion 四元数(Quaterion)   罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议   ...

  2. linux初学体会

    第一篇随笔,其实是为了写作业,可是老师的要求是对的,其实自己在配环境和做作业的时候也会把遇到的问题的解决方法记录下来,以便以后查找方便.这次借此将那些内容放在这里,也跟大家一起分享下. 上周六算是第二 ...

  3. cf#516C. Oh Those Palindromes(最多回文子串的字符串排列方式,字典序)

    http://codeforces.com/contest/1064/problem/C 题意:给出一个字符串,要求重新排列这个字符串,是他的回文子串数量最多并输出这个字符串. 题解:字典序排列的字符 ...

  4. TPO-13 C2 How to use language lab

    TPO-13 C2 How to use language lab 第 1 段 1.Listen to a conversation between a student and the languag ...

  5. JVM学习--jvm监控和故障处理工具

    java虚拟机性能监控常用命令 Sun JDK监控和故障处理命令有jps.jstat.jinfo.jmap.jhat.jstack . 1.jps jps:JVM Process Status Too ...

  6. 【shell 练习1】编写Shell条件句练习

    实例一.比较两个整数大小 #!/bin/bash while true do read -p "Please input two int nums:" a b >/dev/& ...

  7. 剑指offer-二叉搜索树的后序遍历序列23

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. class Solution: def Verif ...

  8. New Year and Old Property :dfs

    题目描述: Limak is a little polar bear. He has recently learnt about the binary system. He noticed that ...

  9. LeetCode 135——分发糖果

    1. 题目 2. 解答 初始化左序奖赏全为 1,从左往右遍历,如果右边的人评分比左边高,右边奖赏比左边奖赏增 1. 初始化右序奖赏全为 1,从右往左遍历,如果左边的人评分比右边高,左边奖赏比右边奖赏增 ...

  10. opencv-学习笔记(1)常用函数和方法。

    opencv-学习笔记(1)常用函数和方法. cv2.imread(filename,falg) filename是文件名字 flag是读入的方式 cv2.MREAD_UNCHANGED :不进行转化 ...