文档章节

Python学习札记(1)——Python的数据结构(序列)

东方卯
 东方卯
发布于 2014/01/01 19:08
字数 1990
阅读 402
收藏 10
点赞 0
评论 0
  1. 相关知识的介绍

    1.1 序列的类型

    序列是Python最基本的数据结构。

    python有6种内建序列:列表、元组、字符串、unicode字符串、buffer对象和xrange对象。

    序列可以插入、删除、替换并且所有序列都支持迭代。

    1.2 索引

    索引可以理解为序列里每一个元素的标号,从0开始,以-1结束,

    也就是说第一个元素的索引是0,而最后一个元素的索引是-1,

    如c='2011',c[0]=2,c[1]=0,c[2]=1,c[-1]=1。

    1.3 分片

    使用分片,访问一定范围内的元素。分片通过冒号相隔的两个索引实现。

    如:c='Python',当要输出tho时可以编写如:print c[2:5],即输出从索引为二到索引为五的所有元素

    将c全部输出,可以编写为:print c[0:len(c)]或者print c[:]

    输出最后三位可以编写为:print c[:-3]

    输出前三位可以编写为:print c[:3]或print c[-3:]

    但print c[0:-1]或者print c[0:-2]等无法输出全部字符。

    因为[前索引:后索引)输出从前索引开始到后索引之前结束,不包括后索引本身所指的元素


    1.4 步长

    当我们要跳跃式的输出元素时,我们可以使用步长。

    步长默认值为1,可以为负数(步长为负数时将倒序输出),但不能为0!
    如果更改步长则在两个索引后用冒号分隔:如[前索引:后索引:步长]
    如:mynumber = [1,2,3,4,5,6,7,8,9,10]
          mynumber[::4] =》 [1,5,9]                       #步长为4,隔3个元素输出第四个元素
          mynumber[8:3:-1] =》 [9,8,7,6,5]            #从第8个元素倒序到第4个元素
          mynumber[0:10:-2] =》 []                       #0比10在序列中更早出现,所以无输出
          mynumber[::-2] =》 [10,8,6,4,2]              #倒序输出
          mynumber[5::-2] =》[6,4,2]
          mynumber[:5:-2] =》[10,8]

    1.5 相加

    同类型的可以相加,不同类型的不可以相加

    1.6 相乘

    1.7 None、空列表和初始化

    None是python的内建值,表示为空(类似于c的null)
    如果想建立一个长度一定的空列表可以:[None]*n

    1.8 成员资格

    判断一个值是否在序列中,使用in运算符,如果存在返回True,否则返回False

  2. 列表

    2.1 列表的创建

    list(‘Hello’);//list函数用于创建一个列表,可以由其它类型序列创建,如例子中由字符串创建列表。

    或:shoplist=['apple','banana','carrot','pear','grape']

    2.2 列表元素赋值

    用索引可以改变该索引所在的列表元素的值。

    如:numberlist[2] =  100

    2.3 列表元素删除

    使用del操作符可以删除列表中某个索引的元素。

    当然也可以分片删除,如del numberlist[2:3]或者numberlist[2:3] = []


    2.4 分片赋值

    numberlist = list('12345678');
    numberlist[1:4] = []; =》['1','5','6','7','8']//替换空元素,实现删除
    numberlist[1:1] = list('234'); =》['1','2','3','4','5','6','7','8']//使用相同的索引位置,可以在该位置实现插入
    numberlist[1:] = list('abc'); =》['1','a','b','c']//从某个索引位置开始替换到结尾

    2.5 绑定

    当我在用替换空元素来删除元素时,遇到了一个问题:

    为什么事先将numberlist的值用 = 赋给olditem,在修改了numberlist后,olditem的值也一起被修改了呢?

    首先,我们要清楚的是:

    当我们创建一个对象并给它赋一个变量的时候,这个变量仅仅参考那个对象,

    而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存

    这被称作名称到对象的绑定

    我们可以试着证明。

    证明前,我们得了解一个函数id(),函数id()的解释如下:

    那我们可以看看无论是olditem还是numberlist所指向的内存地址是不是同一个。

           

      如上图所示,olditem及numberlist指向的内存地址是同一个,

      这也就不难解释为什么修改了numberlist的同时olditem也被修改了。

      那我们如何将numberlist的值赋给olditem才能保证他们所指的不是同一个内存单元地址或者说

      当我们该别numberlist的值时olditem的值保持不变呢?

      答案就是:得使用切片操作符来建立序列的拷贝!

        

      上图是不是很好的证明了列表的赋值语句创建拷贝。必须使用切片操作符来才能建立序列的拷贝?

      2.6 列表方法

      python中方法的概念:方法是与对象有紧密联系的函数。
      方法的调用方式:对象.方法(参数)
      列表的方法:

            (1)append用于列表尾追加元素。append方法直接修改原列表而不是返回一个新列表。
            (2)count方法用于统计某个元素出现测次数。
            (3)extend方法用于在列表尾追加另一个列表(扩展)。list1.extend(list2),修改list1,list2不变。
            extend看起来像连接(+)操作,但是连接只会生成新的列表副本,而不会改变原有两个列表。
            用连接实现扩展(extend):a= a+b,虽然可以实现但是没有extend方法效率高。
            用分片替换实现扩展(extend):a[len(a):] = b;可以实现但是可读性不好。
            (4)index方法用于找出第一个与给定值匹配的元素的索引位置。如果没有该值则异常。
            (5)insert方法用于向列表中插入对象。对象.insert(插入位置,插入值);也可以用分片赋值实现插入。
            (6)pop方法用于删除列表中某一元素。默认删除最后一个元素。该方法返回被删除的元素的值。
            pop是唯一一个既能修改列表又返回元素值的列表方法。
            默认的append和pop方法结合使用可以实现栈的操作(LIFO)
            使用insert(0,...)和pop方法可以实现队列的操作(FIFO)
            (7)remove用于移除列表中的某个值的第一个匹配项。remove是一个没有返回值的原位置改变方法,
            它修改列表但是没有返回值。
            (8)reverse方法将列表中的方法反向存储。
            (9)sort方法用于在原位置对列表排序,原位置意味着改变列表而不是返回列表副本。(升序排列)
            注意sort没有返回值,如果当遇到想对某列表进行排序,但是又不想改变原列表的情况下,则需要
            如下操作:
            y = x[:];//将列表x复制给y   注意如果只简单的用y = x,实际上y和x还是指向的同一个对象!
            y.sort();
            sorted函数可以生成一个列表的副本,sorted是函数不是方法,它可以用于任何序列,但返回值都为列表。
            高级排序:
            sort方法参数:1.可以指定排序比较函数,lst.sort(cmp);
            2.可以给每个元素创建键,按照键排序,lst.sort(key = len);
            3.可以指定是否反向排序,lst.sort(reverse = True);

  3. 元组

    3.1 元组的基本介绍

        元组可以看作是元素值不能改变的列表。因为元素值 不能改变,所以元组没有方法。

        即使元组只有一个值也要用‘,’分开

        42 不是元组,(42)也不是元组,(42,)才是元组。

        3*(40+2)  =》126

        3*(40+2,) =》(42,42,42)

     3.2 tuple函数

        上面说的是元组没有方法,不是说元组没有函数!

         tuple函数将列表转换为元组.

       

     3.3 元组不可替代的原因:

        (1)元组可以在映射中当作键使用,但列表不可以

        (2)元组作为很多内建函数和方法的返回值存在

© 著作权归作者所有

共有 人打赏支持
东方卯
粉丝 1
博文 4
码字总数 4084
作品 0
长沙
python序列化数据本地存放

深入# 序列化的概念很简单。内存里面有一个数据结构,你希望将它保存下来,重 用,或者发送给其他人。你会怎么做?嗯, 这取决于你想要怎么保存,怎么重用,发送给谁。很多游戏允许你在退出的...

临峰不畏
2015/01/18
0
0
python学习笔记(五)——语句

               语句(条件、循环和其他语句)   之前一直在学习数据结构,单纯的结构并不能做什么事,只有组成语句之后才能实现比较复杂的功能,和其他语言一样,条件、循...

zhoujie0111
2013/04/08
0
0
5本必读Python入门书籍,你都看过吗?(附福利)

今天技术学派为大家准备了5本Python入门书籍,除了书籍小编还整理了3个常用的资源网站分享给大家。 1.Python基础教程 《Python基础教程》是经典的Python入门教程书籍,本书层次鲜明,结构严谨...

Python燕大侠
06/07
0
0
Python学习系列入门篇(二)

这些天忙的不可开交,今天终于想起来继续写,工欲善其事必先利其器,得找个markdown编辑器用一下,windows找了个破解版的(主要是可以传图片),使用起来还不错,支持实时预览,就用它了,首...

疑似一僧
2014/03/17
0
0
一个月入门Python爬虫,快速获取大规模数据

数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索...

Python开发者
04/25
0
0
Python学习札记(2)——搭建Boa-constructor

一、Boa-constructor是什么 看看来自己百度的解释:Boa Constructor是一个跨平台的Python集成开发环境和wxPython图形用户界面构建器。它提供了可视化方式的框架(窗口) 的创建 和处理、对象...

东方卯
2014/03/04
0
2
简单比较Python的数据持久化操作

转自http://smartzxy.iteye.com/blog/680431 简单比较Python的数据持久化操作(一) 最近喜欢上了Python,喜欢它的简洁高效,喜欢它的“无所不能”。 Python的数据持久化操作主要是六类:普通...

alazyer
2014/05/28
0
0
数据挖掘敲门砖--Python爬虫入门

WHAT 数据挖掘是一门综合的技术,随着Ai的兴起,在国内的需求日渐增大。 数据挖掘的职业方向通常有三个,顺便概要地提一下所需的技能(不仅于此) 数据分析方向:需要数理知识支撑,比如概率...

fesoncn
01/02
0
0
Python快速学习02:基本数据类型 & 序列

前言   系列文章:[传送门]   也就每点一点点的开始咯,“还有两年时间,两年可以学很多东西的”      Python ['paɪθən] n. 巨蛇,大蟒     基本数据类型  变量不需要声明  ...

泥沙砖瓦浆木匠
2014/04/16
0
0
连 00 后学 Python 了,身为程序员的我慌了

2018 年 1 月 16 日,教育部召开新闻发布会,正式将人工智能、物联网、大数据处理划入高中新课标,并于今年秋季开始执行。这意味着,现在 16 岁的学生就要开始学习编程了! 本次核心目标:修...

dqcfkyqdxym3f8rb0
05/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue基础知识练习

一、Hello World <div id="itany">{{msg}} <!-- 两对大括号{{}}称为模板,用来进行数据的绑定显示在页面中 --> </div><script src="js/vue.js"></script><script>var vm=new Vue({......

一个yuanbeth
8分钟前
0
0
spring @Transactional注解参数详解

原文:事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 @Transactional public class TestServiceBean implements TestService {} 当类中某些方法不需...

binhu
11分钟前
0
0
CORS 跨域实践

本文首发于个人微信公众号《andyqian》,期待你的关注~ 前言 系统通常都是由单体应用逐渐演化而来,演化成为前后端分离的分布式应用。在享受分布式系统带来的诸多好处之时,随之而来的也有不...

andyqian
18分钟前
7
0
开源 java CMS - FreeCMS2.8 会员管理

项目地址:http://www.freeteam.cn/ 会员组管理 会员管理 会员管理 从左侧管理菜单点击会员管理进入。 添加会员 在会员列表下方点击“添加”按钮。 填写相关属性后点击“保存”按钮即可。 编...

freeteam
19分钟前
0
0
bboss升级至 v5.0.6.8版本,改善对Elasticsearch SQL 的支持

v5.0.6.8功能改进如下: (1)持久层支持支持Elasticsearch SQL,使用参考文档:玩转Elasticsearch SQL功能 (2)解决持久层/elasticsearch模板变量解析多层级不起作用问题 (3)完善国际化功能 (4...

linux-tao
21分钟前
0
0
扫码二维码跳转到某个网站

添加maven依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.goog......

gaomq
27分钟前
0
0
Windows平台下搭建Git服务器的图文教程

Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在windows下的开发要把自己...

MKChan
33分钟前
0
0
告警系统主脚本&告警系统配置文件&告警系统监控项目

20.20 告警系统主脚本 准备工作 定义监控系统的各个目录,然后再去定义主脚本,因为是分布式的,所以需要每一台机器都需要定义,事先创建好各个脚本和各个目录,随后脚本直接拷贝过去即可,然...

影夜Linux
34分钟前
0
0
谈谈神秘的ES6——(一)初识ECMAScript

谈谈神秘的ES6——(一)初识ECMAScript 在《零基础入门JavaScript》我们就说过,ECMAScript是JavaScript的核心,是JavaScript语法和语义的解释器,同时也是一个标准。而ECMAScript标准其实也...

JandenMa
今天
1
0
第16章 Tomcat配置

16.1 Tomcat介绍 ####Tomcat介绍 LNMP架构针对的开发语言是PHP语言,php 是一门开发web程序非常流行的语言,早些年流行的是asp,在Windows平台上运行的一种编程语言,但安全性差,就网站开发...

Linux学习笔记
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部