Python入门之路-常用语法2 列表、元组

列表

1.列表

格式为[a,b,c,d],可以存放不同类型的数据
访问指定元素以arr[index]格式, 如果想要访问最后一位元素,可以通过

list1[len(list1)-1]

也可以通过

list1[-1]

同理倒数第二个是list1[-2]

2.列表切片

通过list[startIndex:endIndex]语法,可以获取指定范围的列表切片,不包括结束点位:

list1[1:3]

如果从起始点位开始或者结束点位结束,可以省略对应的下标:

list1[:3]

list1[3:]

list1[:]

注意,冒号不能省略

此外,还可以设置列表跨度步进值:

list1[1:6:2]

代表从第一个元素开始,获取下一个元素的跨度为2,到第六个元素结束,即1,3,5

由此,可以使用list1[::-1]来获取数组的倒序

3.列表新增元素
  • 使用append函数,添加单个元素到末尾

    list1.append("第六个元素")
    
  • 使用extend函数,添加多个元素到末尾
    extend函数可以添加一个可迭代对象

    list1.extend([7,8])
    

    以上写法也可以用切片来完成

    list1[len(list1):] = [7,8]
    

    与上面的extend写法是等价的关系

  • 使用insert函数,插入单个元素到指定下标位置

list1.insert(1,"插入的元素内容")

4.列表删除元素

  • remove函数
    可以移除指定元素
    如果包含多个相同的元素,只会删除第一个
    如果列表中并不存在该元素,会报错
list1.remove("需要删除的元素内容")
  • pop函数
    可以移除指定下标位置的元素,并返回该元素
i = list1.pop(2)
  • clear函数,用于清空列表
list1.clear()

5.列表修改元素

  • 通过指定下标可以修改元素
    注意,不可以越界,超出数组本身长度会报错
list1[0] = "修改之后的元素"
  • 通过切片方式也可以完成元素的替换,并且可以替换多个元素
list1[1:] = ["元素2","元素3"]

替换元素的长度与切片长度可以不相等,列表长度会随之发生改变

6.列表查找元素

  • count函数,用于查找元素在列表中出现的次数
list1.count("指定元素内容")
  • index函数,查找某个元素在列表中的索引值
    如果有多个相同的元素,只会返回第一个的下标值
list1.index("查找的元素内容")

index函数有两个额外的参数值,index(x, start, end), 可以传入查找的起始位置

list1.index("查找的元素内容",10,20)

7.列表复制

  • copy
    使用copy函数可以复制一份相同的列表
list2 = list1.copy()
  • 使用切片进行实现
list3 = list2[:]

效果与上述的一致

使用copy时,会对列表进行浅拷贝,列表具有不同的地址,列表内的元素仍然是地址拷贝

list1 = [1,2,3]
list2 = list1.copy()
list2[0] = 3
list1  // [1, 2, 3]
list2  // [3, 2, 3]

当对copy出来的列表list2进行修改赋值,list1保持原来的值
但是如果对list2列表内的元素进行修改赋值,list1内的元素也对应修改

list1 = [[0,1,2],[1,2,3],[2,3,4]]
list2 = list1.copy()
list2[0][0] = 3
list2  // [[3, 1, 2], [1, 2, 3], [2, 3, 4]]
list1  // [[3, 1, 2], [1, 2, 3], [2, 3, 4]]

因为copy浅拷贝是对列表外层对象进行拷贝,如果包含嵌套对象,只会拷贝其引用

使用深拷贝可以解决这个问题
深拷贝,需要先引入copy模块

import copy
copy.copy(list1)  // 浅拷贝
copy.deepcopy(list1)  // 深拷贝

深拷贝会对对象及对象内的子元素进行拷贝

8.列表拼接

可以使用+、*等运算符对列表进行拼接

list1 = [1,2,3]
list2 = [4,5,6]
list3 = list1+list2  // [1,2,3,4,5,6]
list4 = list1 * 3 // [1,2,3,1,2,3,1,2,3]

通过*进行的拷贝是地址拷贝,此时修改一个列表,另外的列表也会发生修改

9.列表推导式

使用语法糖对列表进行处理以生成一个新的列表,效率较高

格式:[表达式 +  for循环语句]

如:[i * 2 for i in list1]

list1 = [i * 2 for i in range(3)] // [0, 2, 4]

列表推导式后面可以添加一个筛选句

格式:[表达式 +  for循环语句 + 筛选语句]

如:
[ i * 2 for i in range(3) if i < 2]  // [0, 2]

列表推导式中,循环语句使用嵌套写法

格式: [表达式 + for循环语句1 + for 循环语句2 + ... + for循环语句n]
如:
list1 = [[0,1,2],[1,2,3],[2,3,4]]
[i for firstRow in list1 for i in firstRow] // [0, 1, 2, 1, 2, 3, 2, 3, 4]

同理,每个for语句后面都可以添加一个筛选语句

格式: [表达式 + for循环语句1  + 筛选语句1 + for 循环语句2 + 筛选语句2 + ... + for循环语句n + 筛选语句n]

10.其他函数

  • 排序 sort函数、reverse函数
    通过sort函数可以实现列表的排序,reverse函数实现倒序

元组

格式为 (a, b, c, d, e), 其中()可以去掉,即a, b, c, d, e。像列表一样可以容纳多个不同类型的对象,

元组数据是不可变的(但是如果元组内存放的是可变类型,比如列表,该数据是可以修改的)

  • 取值
    可以通过下标进行取值, 但是元组数据不可变,无法通过下标来修改值
tuple1 = (1,2,3,4,5)
tuple1[0] // 1

也可以像列表一样通过切片来取值

tuple1[1:3]  // (2, 3)

还可以通过赋值方式来进行取值

tuple1 = (1,2,3)
(x, y, z) = tuple1
x // 1
y // 2
z // 3

注意这种方式需要赋值的数量跟对应元组的长度一致

  • count函数、index函数、+、*
    同列表的用法一致

  • 嵌套
    元组内可以嵌套元组

(tuple1,tuple1) // ((1, 2, 3, 4, 5), (1, 2, 3, 4, 5))
  • 列表推导式
    元组也支持列表推导式语法
[i + 1 for i in tuple1] // [2,3,4,5,6]

会生成一个列表

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