python学习笔记第3节-数据索引与切片

基本数据类型的索引和切片

        我们已经学习了,数字,布尔,字符,列表,字典,元组,集合等7种数据类型,这些类型得数据在使用时如果单个出现,也就意味着一个变量只存储他们中的一个时,这个变量就代表数据得全部,要对这个变量进行读取,修改等操作,可以直接进行。但是当一个变量中存储着多个数据时,我们依然可以对变量进行整体操作,但是很多时候,我们不希望整体改变变量中的内容,而是要改变其中的一部分,此时简单得赋值语句就不能满足要求了,我没需要用到变量元素定位得知识,我们开始学习简单的元素定位知识。

        1、多个数字元素的定位


a = 12,123,343

b = a[0]

c = a[1]

d = a[2]

print(b)

print(c)

print(d)

print(a)

print(type(a))

print(type(b))

print(type(c))

print(type(d))

输出:12

123

343

(12, 123, 343)

<class 'tuple'>

<class 'int'>

<class 'int'>

<class 'int'>


    这里使用了type()函数来查询变量的数据类型,type()函数是编写代码时频繁使用的函数。

    可以看到,a被赋值了3个用逗号隔开的数字时,解释器会将a作为一个元组类型的变量来对待,由于元组的不可变性,他的元素被固定了下来,无法修改。此时我们依然可以用个元素的标号将元素读出并打印,元素的性质依然是int类型。可见元素的定位是可以通过变量名接元素标号的方法定位,标号用方括号括起来


       2、多个字符串元素的定位

 a = '12','123','343'

b = a[0]

c = a[1]

d = a[2]

print(b)

print(c)

print(d)

print(a)

print(type(a))

print(type(b))

print(type(c))

print(type(d))

输出12

123

343

('12', '123', '343')

<class 'tuple'>

<class 'str'>

<class 'str'>

<class 'str'>

我们给上例中的数字加上引号,变成字符串型,得到的结果几乎一样,和上例不同的是,字符串元素b、c、d是任然可分的:

e = d[1]

print(e)

print(type(e))

输出4,<class 'str'>

     3、多个布尔值的定位

a = True,False,False

b = a[0]

c = a[1]

d = a[2]

print(b)

print(c)

print(d)

print(a)

print(type(a))

print(type(b))

print(type(c))

print(type(d))

输出True

False

False

(True, False, False)

<class 'tuple'>

<class 'bool'>

<class 'bool'>

<class 'bool'>

       我们猜想:一个变量赋值多个元素值,不加标识约束,并用逗号分割,解释器会把这个变量当作元组来处理。

a = '12',123,True,'343',[1,2,3], {True,'wenzi',23},{'name':'baobao'},(5,5,8)

b = a[0]

c = a[1]

d = a[2]

e = a[3]

f = a[4]

g = a[5]

h = a[6]

i = a[7]

print(b)

print(c)

print(d)

print(e)

print(f)

print(g)

print(h)

print(i)

print(type(a))

print(type(b))

print(type(c))

print(type(d))

print(type(e))

print(type(f))

print(type(g))

print(type(h))

print(type(i))

输出12

123

True

343

[1, 2, 3]

{True, 'wenzi', 23}

{'name': 'baobao'}

(5, 5, 8)

<class 'tuple'>

<class 'str'>

<class 'int'>

<class 'bool'>

<class 'str'>

<class 'list'>

<class 'set'>

<class 'dict'>

<class 'tuple'>

      我们的猜想的到验证。

4,字符串,列表,元组,集合,字典的简单索引(定位)

我们上边试验了不加标识符号的各种情况,python对于无符号标识的元素组合当作元组来处理,虽然没有报错,但显然是不规范的,按规范书写应补全数据标识符。

 观察一下代码

b = 'hello word'

c = b[0:5]

print(c)

输出 hello

元素索引时用方括号标识索引范围方括号内部是索引的具体范围;

0:5代表从第一个到第四个,索引角标取头不取尾,取头不取尾是一个取值范围的通用规则,在循环等情况下也遵循这个规律

b = 'hello word'

c = b[0:-3]

print(c)

输出 hello w

0:-3代表从第一个取到倒数第3个,-负号代表倒数,同样尾部不取;

b = 'hello word'

c = b[5:-6]

print(c)

此时没有输出

如果角标限定的范围中没有目标,则索引失败,取不到任何元素,这里5:-6限定的范围中没有任何元素

b = 'hello word'

c = b[0:5:2]

print(c)

输出hlo

在角标0:5:2中0:5限定从第一个取到地个,:2限定了步长为2,每两个取一个

多元素索引的规则是通用的

b1 = ['1','2','3','4','5','6','7','8','9']

c1 = b1[0:5]

print(c1)

c2 = b1[3:-3]

print(c2)

c3 = b1[0:6:3]

print(c3)

输出['1', '2', '3', '4', '5']

['4', '5', '6']

['1', '4']

b1 = ('1','2','3','4','5','6','7','8','9')

c1 = b1[0:5]

print(c1)

c2 = b1[3:-3]

print(c2)

c3 = b1[0:6:3]

print(c3)

输出('1', '2', '3', '4', '5')

('4', '5', '6')

('1', '4')

    由于集合是无序的数据类型,所以不能运用下标的方法进行索引定位

   集合需要切片和索引操作时需要将其转化为列表,元组等可以切片的数据类型

b =  {'1','2','3','4','5','6','7','8','9'}

b1 = tuple(b)      #需要转换

print(b1)

c1 = b1[0:5]

print(c1)

c2 = b1[3:-3]

print(c2)

c3 = b1[0:6:3]

print(c3)

输出('7', '3', '2', '4', '1', '5', '6', '9', '8')

('7', '3', '2', '4', '1')

('4', '1', '5')

('7', '4')

有没有发现集合b经过转换到b1后元素的顺序生了变化,而且每次运行这个程序得到的顺序都不同。其实这是合理的,由此我们可以直观理解集合的无序性。

        字典和集合都使用花括号标识,字典是否有无序的特性呢?是的,字典也是无序的,也同样无法通过下标来索引,字典通过键名来索引定位。


b =  {'name':'huahua','name2':'caocao','name3':'guoguo'}

print(b)

c1 = b['name']

print(c1)

c2 = b['name2']

print(c2)

c3 = b['name3']

print(c3)

b1 = list(b)

print(b1)

输出{'name': 'huahua', 'name2': 'caocao', 'name3': 'guoguo'}

huahua

caocao

guoguo

['name', 'name2', 'name3']

从最后一个输出可以看到,经过list ()方法转换后的列表是一个存有字典键名的列表用tuple()方法转换后也是同样的结果,奇怪的是,转换后得到的列表和元组都是和字典的顺序是一致的,多次运行也不会改变,或许这只是一种假象。

    我们已经了解了7种基本数据类型的简单索引,我们还会遇到很多不同的情况,比如花式索引等索引技巧,那不重要,当我们遇到时再分撒学习,掌握基本的索引方法已经可以让我们读一些程序,写一些程序了。

     写代码也和普通语言一样,掌握技巧,对语言十分熟悉的人为了追求简洁高效,他们的代码中会有很多技巧性风格性的东西,这样的代码对初学者而言,就好似草书,好似俚语,暗话,理解起来十分困难,而且高水平高质量的代码更注重封装,许多类,许多库,许多文件和模块会让初学者摸不着头脑,所以初学者有必要看一些入门级代码和资料,运用所学的知识完成必要的练习,不动手敲代码、不动脑想问题编程是学不会的。

        到目前为止我们7种数据类型的特点,简单索引,配合赋值语句打印语句,我们可以试着在别人的代码中找到类似的语句,把他们挑出来,在编程环境中跑一跑,改一改,能够不报错,得到正确的打印输出这将激发你更多学习动力。初学者遇到问题是在所难免的,把报错信息和代码在网上搜一搜,总会有解释有答案的。对于初学者常见的错误,网上有很多汇总的帖子和资料,对照已学内容及时改正,问题会越来越少。

      类的思想为拓展数据类型提供了条件,时下流行的神经网络,计算图,都是数据类型。

      谈一点编程学习的一些条件。

      网络环境改造:网络是必备的,谷歌是必备的。很多游戏加速器,外贸企业的数据通道都需要外网环境下实现,外网不是必须,但随着学习的深入,不上github,油管,原生社区逛逛,就无法得到第一手的学习信息,谷歌是一位很好的学习导师,是处理疑难问题的拐杖,搜索的准确性要好很多。实现外网环境的常见渠道:刚开始花点小钱,一旦有机会出去,谷歌,油管,github上大把的资源,出去以后就不用教了。

      编程平台:pycharm,和微软的Visual Studio Code,二选一。虽然其他的ide 如Jupyter Notebook,pyscripter 等,甚至网页版的环境也能满足初学者的需求(随着andaconda pyscript的推出,基于网页前端运行的平台会大量出现),但正规平台才是最终的射击演练场,与其半路转型,不如早点适应,学会安装配置编程环境也是基础的技能。环境搭建简单流程:1平台软件注册,2下载,3安装,4平台运行环境变量添加(平台命令的文件目录添加到系统环境变量的目录里,这样平台的命令才会被系统支持)5,检测平台能否跑起来 6.(选择python版本)下载安装anaconda(科学计算库)7,将annaconda库添加到系统环境变量,8检查anaconda能否在系统里跑起来 9,运行编程平台,新建工程,为工程配置python解释器(指定anaconda 自带的pyhon解释器的路径为工程解释器)。其中6,7,8不是必须的,你也可以单独下载pyhon解释器配置给工程,但是anaconda对持续的学习会有很大的帮助,很多的库都依赖anaconda支撑。

     辛辛苦苦搭建了平台,找一点有趣的程序跑一跑吧。

     不要直接在网页上复制程序在平台上运行,大部分标点符号、排版符号是不兼容的,先放到txt文本编辑器里保存一下,再去运行,尽可能的自己敲代码,哪怕是照抄也比直接复制粘贴效果好。

       索引练习题:

1、jj = [‘kj’,’8’,21,’天空‘ ,[2,4,8],   {},{4,8,1},{‘A6’:3,’价格 ‘:280000,’颜色’:‘红’}]

    (1)、jj的元素共有几种数据类型?

     (2)、jj是几维列表?

     (3)、jj[5]共有几个元素?

     (4)、使用python语句,将’红‘改成’黄‘将价格280000改成260000

2、lsi = [‘tiwtter’,’facebook’,’google’,[[2,4],[45,3]],[‘True’,’False’]]

     ss = lsi[3]

     猜想ss的值?type(ss)的值?ss[1,1]>ss[0,0]的值?

3、试述元组和集合的异同点?

4、在网上搜索’python花式索引’相关资料,保存资料,以便查阅。

       花式索引中冒号的作用?

       花式索引中冒号的作用与range函数中的逗号是否一样?

       冒号单独使用时代表的意义?冒号前后的数字代表?

       花式索引中逗号的作用?

      花式索引中出现多个[ ]的 时候,他们和维度的关系?

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容