列表和元组篇

概述

        列表、元组和字符串同属于序列的一种,都有序列的特点,每个元素都有编号,即其位置或索引,其中第一个元素的索引为0,第二个元素的索引为1,依此类推。

一、列表

1、定义方法

        列表名=[元素1,元素2,...]

        列表名=list(序列名)

        列表名=字符串.split()

        列表名=[含有变量名的表达式  for  变量名1  in  序列 [for  变量名2  in  序列]....]

        其中元素可以是任何类型,也可以是列表或元组,且可以各不相同。

        使用列表生成式生成列表时可以使用嵌套循环,还可以使用条件判断。

例:

names=["张三","李四","王五","马六"]    #元素为字符串的列表

students=[[1,"张三"],[2,"李四"],[ 3,"王五"]]    #元素为列表的列表

names=list("Hello")    #建立['H', 'e', 'l', 'l', 'o']列表

names=list()    #建立空列表

names=[None]*4    #建立[None, None, None, None]定长元素为空的列表

a=[x+x for x in range(5)]    #使用列表生成式建立[0, 2, 4, 6, 8]列表

a=[x+x for x in range(5) if x%2==0]    #使用列表生成式建立[0, 4, 8]列表

a=[x+y for x in range(5) if x%2==0 for y in range(5) if y%2==1]    #使用列表生成式建立[1, 3, 3, 5, 5, 7]列表

a="This is a test string from Andrew".split()    #使用split方法生成列表['This', 'is', 'a', 'test', 'string', 'from', 'Andrew']

2、基本操作方法

        查询:

            列表名[索引]    通过索引查询

            列表名[首索引:尾索引:步长]            通过切片查询

                说明

                索引是从0开始的整数,索引和步长都可以是负数。使用切片查询时,结果包括首索引元素不包括尾索引元素,即“顾首不顾尾”。

                当步长为正数时,以首索引位置自左向右按照步长查询,输出结果为列表相同顺序,所以首索引必须比尾索引小;当为负数时,以首索引位置自右向左按照步长查询,为列表反向顺序,所以首索引必须比尾索引大;步长不可以为0,且默认为1。

                当首索引和尾索引为相等的数值时,返回空列表。

                使用切片查询时,可以在切片的同时再切片,实现嵌套切片。

例:

names=["张三","李四","王五","马六"] 

#正索引:0        1           2        3

#负索引:-4       -3        -2        -1

print(names[1] )   #返回    李四

print(names[-1])    #返回    马六

print(names[0:2])    #返回     ['张三', '李四']

print(names[:2])    #返回     ['张三', '李四']

print(names[2:2])    #返回       []

print(names[1:3])    #返回     ['李四', '王五']

print(names[1:100] )   # 返回     ['李四', '王五', '马六']

print(names[1:][1:][1:] )   #返回   ['马六']

print(names[-3:-1] )   #返回     ['李四', '王五']

print(names[-3:] )   #返回     ['李四', '王五', '马六']

print(names[1:3:2] )   # 返回     ['李四']

print(names[::2] )   #返回     ['张三', '王五']

print(names[::-2] )   #返回     ['马六', '李四']

print(names[1:3:-1])    #返回      []

print(names[3:1:-1])    #返回      ['马六', '王五']

新增

        列表名=列表名+列表名    使用列表相加方法

        列表名=列表名*数值    使用列表乘积方法新增重复元素

        列表名.append(元素)    使用append方法结尾插入

        列表名.extend(元素)    使用extend方法结尾插入元素

        列表名.insert(索引,元素)    使用insert方法指定索引位置插入

        列表名[首索引:尾索引]=列表    使用首尾相同索引号切片赋值插入

        说明

        使用相加方法新增时新增的必须为列表;

        使用切片赋值时,首尾索引相等时,元素插在索引-1位置;

        使用乘积新增时,乘数必须为整数,乘数可以是计算结果为整数的表达式,当乘数为负数或0时,结果返回空列表;

例:

names=["张三","李四","王五","马六"]

names=names+["赵七"]    #输出names返回    ['张三', '李四', '王五', '马六', '赵七']

names=names*2   #输出names返回    ['张三', '李四', '王五', '马六', '张三', '李四', '王五', '马六']

names.append("赵七")    #输出names返回    ['张三', '李四', '王五', '马六', '赵七']

names.insert(1,"赵七")    #输出names返回     ['张三', '赵七', '李四', '王五', '马六']

names.extend("赵七")    #输出names返回     ['张三', '李四', '王五', '马六', '赵', '七']

names.extend(["赵七"])     #输出names返回    ['张三', '李四', '王五', '马六', '赵七']

names[2:2]="赵七"    #输出names返回      ['张三', '李四', '赵', '七', '王五', '马六']

names[2:2]=["赵七" ]    #输出names返回      ['张三', '李四', '赵七', '王五', '马六']

修改

列表名[索引]=值        通过索引赋值

列表名[首索引:尾索引:步长] =值     通过切片赋值

说明 

        通过索引赋值时,可以赋值所有对象,且将对象作为一个整体赋值;

        通过切片赋值时,当步长为1时,可以赋值与切片元素数不相同的序列,当步长不为1时,只能赋值与切片元素数相同的序列;

        通过切片赋值时,步长为1时,当尾索引小于或等于首索引时,元素插入到首索引-1位置,当尾索引大于首索引时,元素将赋值给首索引到尾索引(不包括)之间的元素;

        通过切片赋值时,只能赋值序列,且按照序列第一层最小单位元素赋值;

        使用切片赋值时,步长为正数时,元素自左向右赋值,步长为负数时,元素自右向左赋值。

例:

names=["张三","李四","王五","马六"]

names[2]="赵七"    # 输出names返回      ['张三', '李四', '赵七', '马六']

names[2]=("赵七")    # 输出names返回     ['张三', '李四', '赵七', '马六']

names[2]=("赵七","周八")     # 输出names返回     ['张三', '李四', ('赵七', '周八'), '马六']

names[2:]="赵七"    # 输出names返回    ['张三', '李四', '赵', '七']

names[2:]=["赵七"]    # 输出names返回      ['张三', '李四', ' 赵七 ', '马六']

names[3:1]="赵七"    # 输出names返回      ['张三', '李四', '王五', '赵', '七', '马六']

names[::2]="赵七"     # 输出names返回       ['赵', '李四', '七', '马六']

names[::2]=["赵七","周八"]     # 输出names返回    ['赵七', '李四', '周八', '马六']

names[::2]=("赵七","周八")    # 输出names返回    ['赵七', '李四', '周八', '马六']

names[::2]=(("赵七"),("周八"))    # 输出names返回    ['赵七', '李四', '周八', '马六']

names[-1:-2:-1]="赵"    # 输出names返回    ['张三', '李四', '王五', '赵']

names[-1:-2:-1]="赵七"     # 输出names返回错误

删除

        del 列表名[索引]        使用函数删除索引指定元素

        del 列表名       使用函数删除列表

        列表名.pop(索引)    使用函数删除索引指定元素

        列表名[首索引:尾索引]=[]    使用切片赋空索引删除

说明

        使用切片删除时不可以指定步长,当步长为-1时总返回原列表,无论首尾索引为何值,为其他不为1的值时提示错误;

例:

names=["张三","李四","王五","马六"]

del names[1]    # 输出names返回    ['张三', '王五', '马六']

names.pop()    # 输出names返回    ['张三', '李四', '王五']

names.pop(1)     # 输出names返回    ['张三', '王五', '马六']

names.pop(-1)      # 输出names返回     ['张三', '李四', '王五']

names[1:3]=[]       # 输出names返回     ['张三', '马六']

names[-3:-1:-1]=[]        # 输出names返回      ['张三', '李四', '王五', '马六']

3、相关函数

names=["张三","李四","王五","马六"]

operator.eq(list1, list2)

        比较两个列表的元素是否一样,是返回True,否返回False,使用前需要import operator

print(operator.eq(names,["我","是,","谁"]))    #输出返回    False

len(list)

        返回列表元素个数

print(len(names))    #输出返回    4

max(list)

        返回列表元素最大值

print(max(names))     #输出返回    马六        按照什么选择最大?

print(max('ardjtgoczmd'))      #输出返回     z

min(list)

        返回列表元素最小值

print(min(names))      #输出返回     张三        按照什么选择最小?

list(序列)

        将序列转换为列表

names=list("我是谁")    #输出names返回    ['我', '是', '谁']

obj in list

        判断对象是否在列表中存在,存在返回True,不存在返回False

print("张三" in names)    #输出返回    True

4、相关方法

names=["张三","李四","王五","马六"]

list.append(obj)

        在列表末尾添加新的对象,对象作为一个整体添加;

names.append([a for a in [1,2,3]])    # 输出names返回     ['张三', '李四', '王五', '马六', [1, 2, 3]]

list.count(obj)

        统计某个元素在列表中出现的次数,返回个数,不存在时返回0

print(names.count("李四"))    #输出返回    1

list.extend(序列)

        在列表末尾添加新的序列,将序列第一层每个元素作为单独元素添加;

names.extend([a for a in [1,2,3]])    # 输出names返回    ['张三', '李四', '王五', '马六', 1, 2, 3]

names.extend([a for a in [[0,1],2,3]])    # 输出names返回     ['张三', '李四', '王五', '马六', [0, 1], 2, 3]

names.extend("我是谁")     # 输出names返回      ['张三', '李四', '王五', '马六', '我', '是', '谁']

list.index(obj,首索引,尾索引)

        从列表检索区间中找出某个值第一个从左至右匹配项的索引位置,当找不到时返回错误;

        检索区间按照顾首不顾尾原则;

        当首尾索引相同时,检索区间为空,提示错误;

        首尾索引可以使用负数;

        检索时总是从首索引位置向右进行检索,直到尾索引;

print(names.index("李四"))    #输出返回    2

print(names.index("李四",-1,0))    #输出返回错误

print(names.index("李四",0,-1))    #输出返回    1

print(names.index("李四",-4,3))     #输出返回    1

list.insert(index, obj)

        在列表指定索引元素前添加新的对象,对象作为一个整体添加;

        索引可以使用负数;

names.insert(1,"周八")     # 输出names返回      ['张三', '周八', '李四', '王五', '马六']

names.insert(-2,"周八")      # 输出names返回    ['张三', '李四', '周八', '王五', '马六']

list.pop(obj=list[-1])

        移除列表中的指定索引元素(默认最后一个元素),并且返回该元素的值;

        索引可以使用负数;

        当索引超出界限时提示错误;

names.pop(-3)    # 输出names返回      ['张三', '王五', '马六']

names.pop(0)    # 输出names返回      ['李四', '王五', '马六']

names.pop()     # 输出names返回       ['张三', '李四', '王五']

list.remove(obj)

        移除列表中某个值的第一个匹配项,当未找到时提示错误;

        obj不可以是除了字符串的序列;

names.remove("王五")     # 输出names返回      ['张三', '李四', '马六']

names.remove(["王五"])      #返回错误

list.reverse()

        反向列表中元素

names.reverse()      # 输出names返回      ['马六', '王五', '李四', '张三']

list.sort(key=[func],reverse[True,False])

        对原列表进行排序,key用于指定用什么来比较的函数,reverse用于指定是否按照相反顺序排列,默认值为False

names=["张三","马六","李四","王五"]

print(names.sort())     # 输出错误

names.sort() 

print(names)        # 输出names返回        ['张三', '李四', '王五', '马六']

name2=names.sort

name2()

print(names)         # 输出names返回        ['张三', '李四', '王五', '马六']

names.sort(reverse=True)    #按反向排序

print(names)        # 输出names返回      ['马六', '王五', '李四', '张三']

names.sort(key=id)    #按内存地址排序

print(names)        # 输出names返回        ['张三', '李四', '王五', '马六']

    list.copy

    对原列表进行浅拷贝,对原列表中多层元素进行修改时,新列表也会被修改;

names=["张三","李四",["王五","马六"]]

name=names.copy

name2=names.copy()

print(name)       # 输出name返回新函数地址       <built-in method copy of list object at 0x0061E6E8>

print(name2)       # 输出name2返回      ["张三","李四",["王五","马六"]]  

print(name())       # 输出name返回     ["张三","李四",["王五","马六"]]

names[0]="赵七"

names[2][0]="周八"

print(name())       # 输出name返回    ['赵七', '李四', ['周八', '马六']]

print(name2)       # 输出name2返回   ['张三', '李四', ['周八', '马六']]

二、元组

        与列表一样,元组也是序列,唯一的差别在于元组是不能修改

1、定义方法

例    (1,2,3)

        (1,)

        tuple('张三', '李四', '王五', '马六')

注:当元组只有一个元素时,元素后需添加逗号,否则不能定义成元组,只代表被小括号括起来的元素

print(names=("赵七"))    #返回    赵七

print(len(("1")))     #返回    1

print(len(("1",)))     #返回    1

2、相关函数

        tuple(序列)

        将序列第一层每个元素作为单独元素转换为元组;

names=["张三","李四","王五","马六"]

print(tuple(names))    #输出    ('张三', '李四', '王五', '马六')

names="张三"

print(tuple(names))     #输出     ('张', '三')

2、基本操作方法

        tuple.index(obj,首索引,尾索引)

        与列表相同

        tuple.count(obj)

        与列表相同

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,369评论 0 4
  • 刚才我问张剑(秘书),上午胡县长签批件仍没有淮高的。他说李部长昨天也打电话间了。马明友汇报。 ...
    马明友阅读 95评论 0 0
  • 你在哪里?你在时间里。你在哪里?你在我的眼里。你在哪里?你在生命里。你在哪里?你在晃晃世界里。 你在哪里?你在浮尘...
    万象峰年阅读 164评论 0 2
  • 今年3月,一只两个月大的英短折耳猫成为了我的家庭成员,一时冲动,我的生活就布满了毛,衣服上、床上、沙发上、地上、空...
    愿一尘不染阅读 616评论 0 2