12、列表

一、概要

到目前为止,我们如果想保存一些数据,只能通过变量。但是如果遇到较多的数据要保存,这个时候时候用变量就变的不太现实。我们需要能够保存大量数据的类似变量的东东,这种东东就是数据结构(Data Structures)。

数据结构,它们只是一种结构,能够将一些数据聚合在一起的结构。换句话说,它们是用来存储一系列相关数据的容器。

python 提供了 4 种内置数据结构:List(列表)、Tuple(元组)Dictionary(字典)、Set(集合)

严格来说,字符串也是一种数据结构,因为他把字符组织在了一起。

二、列表简介

listpython 中一般把它翻译为列表.

list 是处理一组有序数据的数据结构,即你可以在一个列表中存储一个序列的数据,

list 是 python 中用途最广的一种数据结构。

list 可以存储多个数据,这些数据用 [ ] 包裹,各个数据之间用 , 分割。

list中的元素可以是任意类型的,但是实际使用的时,一个list 中一般只存储一种数据类型的数据。

list 中可以存储的元素是有顺序的,且允许重复。

list 中的元素也可以更改。

三、如何定义

1、语法结构

[元素1, 元素2, 元素3, ...]

2、结构图

image

3、说明

  • 列表是写在⽅括号[] 之间
  • ⽤**逗号 ** , 分隔开的元素列表
  • 列表中元素的类型可以是不相同
  1. 示例代码
    list = ["小花","小明",18,5000.00,"武汉市高新区"]
    

四、获取元素

1、通过索引

  1. 语法格式
    list[index]
    
  2. 参数说明
    • index
      表示列表中元素的下标(或者理解为位置,从0开始。到长度-1。不能越界)
  3. 示例代码
    info_list = ["小花", "小明", 18, 5000.00, "武汉市高新区"]
    print(info_list[0]) #输出 '小花'
    print(info_list[1]) #输出 '小明'
    print(info_list[-1]) #输出 "武汉市高新区"  倒数第一个 
    print(info_list[6]) # 输出错误 
    """
    Traceback (most recent call last):
      File "list.py", line 6, in <module>
        print(info_list[6])
    IndexError: list index out of range
    """
    

2、通过for循环

  1. 语法格式
    for 变量名 in 列表:
       print(变量名)  # 就是打印输出列表中的每一个元素
    
  2. 示例代码
    info_list = ["小花", 18, 5000.00, "武汉市高新区"]
    for item in info_list:
       print(item)
    小花
    18
    5000.0
    武汉市高新区   
    

3、通过whille

  1. 语法格式
    index = 0
    while index < len(列表) :
        #通过索引获取列表的中的元素
        print(列表[index])
       index +=1
    
  2. 示例代码
    info_list = ["小花",18,5000.00,"武汉市高新区"]
    index = 0
    while index < len(列表):
       print(info_list[index])
       index += 1
    

4、通过切片

  1. 语法格式
    list(eg,end,delta)
    
  2. 说明
    截取部分元素
  3. 参数
    • eg(起始下标)
    • end(终止下标)
    • delta(变化量)
  4. 返回值
    返回一个所有截取的值,生成一个新的列表,不影响原来的列表
  5. 示例代码
    num_list = [1,2,3,4,5,6,7,8,9]
    print(num_list[0:3]) #截取第一位到第三位的元素 输出结果 [1, 2, 3]
    print (num_list[:]) #截取列表的全部  输出结果[1,2,3,4,5,6,7,8,9]
    print (num_list[0:3]) #截取列表的全部 输出结果[1, 2, 3]
    print (num_list[6:]) #截取第七个元素到结尾  输出结果[7, 8, 9]
    print (num_list[:-3]) #截取从头开始到倒数第三个元素之前 输出结果[1, 2, 3, 4, 5, 6]
    print (num_list[2]) #截取第三个元素 输出结果[3]
    print (num_list[-1]) #截取倒数第一个元素 输出结果[9]
    print (num_list[-3:-1]) #截取倒数第三位与倒数第一位之前的元素 输出结果[7, 8]
    print (num_list[-3:]) #截取倒数第三位到结尾 输出结果[7, 8, 9]
    print (num_list[:-5:-3])#逆序截取 输出结果[9, 6]
    
    注意:
    ​ 所有的切片操作都是返回一个新的 list ,所以我们可以通过切片非常轻松的 copy 一个list

五、添加元素

1、append

  1. 语法格式
    list.append(obj)
    
  2. 说明
    list 的末尾添加元素,参数obj
  3. 参数
    要添加的对象
  4. 返回值
    无返回值,修改原来的列表
  5. 示例代码
    nums = [10, 20, 40, 30, 25]
    nums.append(1000)
    print(nums)
    

2、insert

  1. 语法格式
    list.insert(index, obj)
    
  2. 说明
    把元素 ele 插入到指定的 index 位置。原来的元素会自动右移动
  3. 参数
    • index -- 对象 obj 需要插入的索引位置。
    • obj -- 要插入列表中的对象
  4. 返回值
    没有返回值,修改原来的列表
  5. 示例代码
    nums = [10, 20, 40, 30, 25]
    nums.insert(2, 2000)
    print(nums)
    

3、extend

  1. 语法格式
    list.extend(seq)
    
  2. 说明
    用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
  3. 参数
    元素列表
  4. 返回值
    没有返回值,但会在已存在的列表中添加新的列表内容。
  5. 示例代码
    it = ['Python', 'Java', 'JavaScript']
    it2 = ['H5','Androi','IOS']
    it.extend(it2)
    print(it)
    ['Python', 'Java', 'JavaScript', 'H5', 'Androi', 'IOS']
    

六、删除元素

5.1、del

  1. 语法格式
    del 列表[索引]
    
  2. 说明
    可以删除指定下标的值,del关键字本质上是用来将一个变量从内存中删除的。
  3. 返回值
  4. 示例代码
    nums = [10, 20, 40, 30, 25]
    del nums[0]
    print(nums)
    del nums[0:2]
    print(nums)
    

5.2、pop

  1. 语法格式
    列表.pop([index])
    
  2. 说明
    移除列表中的一个元素(默认最后一个元素),并且返回该删除元素的值
  3. 返回值
    该方法返回从列表中移除的元素对象。
  4. 示例代码
    nums = [10, 20, 40, 30, 25]
    #pop 指定位置删除
    del_value =  nums.pop(0)
    # 删除最后⼀个
    last_value =  nums.pop()
    print(lastvalue)
    

5.3、remove

  1. 语法格式
    list.remove(obj)
    
  2. 说明
    移除列表中某个值的第一个匹配项 没有会抛异常
  3. 返回值
    无返回值
  4. 示例代码
    nums = [10, 20, 40, 30, 25,10]
    nums.remove(10)#移除指定位置
    print(nums)
    nums.remove(100) #移除不存在的 抛出异常
    [20, 40, 30, 25, 10]
    

5.4、clear

  1. 语法
    list.clear()
    
  2. 说明
    清空列表中所有的元素
  3. 参数
  4. 返回值
  5. 示例代码
    nums = [10, 20, 40, 30, 25,10]
    nums.clear()
    print(nums)
    []
    nums2 = [10, 20, 40, 30, 25,10,[1,2,3,4]]
    nums2.clear()
    print(nums2)
    []
    

6、修改元素
6.1、通过定位到下标直接修改

  1. 语法格式
    list[索引] = 值
    
  2. 示例代码
    cities =['上海','北京','广州']
    cities[0] = '深圳'
    cities[1] = '武汉'
    cities[-1] = '长沙'
    print(cities)
    ['深圳', '武汉', '长沙']
    

七、其它函数

1、list

  1. 语法格式
    list( seq )
    
  2. 说明
    将元组转换为列表
  3. 参数
    要转换为列表的元组
  4. 返回值
    返回列表
  5. 示例代码
    str = 'abcdefjg'
    strs = list(str)
    print(strs)
    ['a', 'b', 'c', 'd', 'e', 'f', 'j', 'g']
    

2、sort

  1. 语法格式
    list.sort([func])
    
  2. 说明
    对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数
  3. 参数
    如果指定了该参数会使用该参数的方法进行排序
  4. 返回值
    该方法没有返回值,但是会对列表的对象进行排序
  5. 注意事项
    python3.0不允许不同数据类型进行排序
  6. 示例代码
    nums = [1,2,1,3,1,5,6,6];
    nums.sort()#默认按照ASCII表先后顺序排序
    #[1, 1, 1, 2, 3, 5, 6, 6]
    print(nums)
    cars = ['Lamborghini','maybach', 'Ferrari',  'Bentley']
    cars.sort(key=len)    # 默认第一原则 字符串从短到长排序,第二原则ASCII表先后顺序
    print(cars) # ['maybach', 'Ferrari', 'Bentley', 'Lamborghini']
    
    # python3.0不允许不同数据类型进行排序
    a = ['x', 'y', 1, 2]
    a.sort()
    """
    TypeError: '<' not supported between instances of 'int' and 'str'
    """
    

3、count

  1. 语法格式
    list.count(obj)
    
  2. 说明
    统计某个元素在列表中出现的次数
  3. 参数
    • obj
      列表中统计的对象
  4. 返回值
    返回元素在列表中出现的次数
  5. 示例代码
    aList = [1,2,1,3,1,5,6,6];
    count = aList.count(1)
    count = aList.count(6)
    print(count)
    3
    2
    

八、嵌套列表

1、说明

嵌套的意思是,列表中的元素也可以是列表。因为列表中的元素可以是任意类型,所以嵌套也是很容易理解的

2、示例代码

nums = [[1, 2], [3, 4], [20, 10]]
shops = [['mate','牛逼',5000.00],['IPhone','装逼',8000.00],['三星','傻逼',1000.00]]

九、列表推到

1、简介

列表推导,有人也叫列表包含。他提供了一种更加简洁的方式去创建列表。

2、语法格式

list = [表达式 for 变量 in 列表]
list = [表达式 for 变量 in 列表 if 条件]

3、说明

会对序列中的每个 item 执行表达式, 然后把满足条件的值存入到一个新的列表中

4、示例代码

  1. 生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))
    nums = list(range(1, 11))
    print(nums)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
  2. 求一个数的3次方
    nums = [n**3 for n in range(10)]
    print(nums)
    
  3. 求30以内能被3整除的数
    multiples = [i for i in range(30) if i % 3 is 0]
    print(multiples)
    [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
    
  4. 遍历文件
    #常规代码
    import os
    import os
    files = []
    for file in os.listdir('/Users/zhangwei/work/ipython/demo1'):
        if file.endswith('.py'):
            files.append(file)
    print(files)
    简化
    import os
    files = [file for file in os.listdir('/Users/zhangwei/work/ipython/demo1')
                if file.endswith(".py")  ]
    #或者
    import os
    files = [file.endswith(".py") for file in os.listdir("/Users/zhangwei/work/ipython/demo1")]  
    
  5. 推导也支持for 的嵌套
    s1 = ["a", "b", "c"]
    s2 = [20, 30]
    s3 = [x + str(y) for x in s1 for y in s2]
    print(s3)
    (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8
    

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