zoukankan      html  css  js  c++  java
  • 2. 基本数据结构-列表

    一、列表定义

    ​ List(列表)是python中使用最频繁的数据类型。列表可以完成大多数的数据结构实现。列表中元素的类型可以不同。它支持数字/字符串/列表(嵌套)。列表是写在[]之间的,用逗号分隔开的元素列表,和字符串一样。列表同样可以被索引和切片,列表被切片后返回一个包含所需元素的新列表。而且列表是有序的(按照你保存的顺序),有索引,可切片方便取值。python可存放32/64位,列表是可变数据类型,不可hash。

    二、列表切片

    1. 示意图

    2. 列表切片操作

    list = [ 'abcd', 786 , 2.23, 'run', 70.2 ]
    
    1. 切片切得是什么类型,切后的数据就是什么类型
        tinylist = [123, 'runoob']
        print (list)            # 输出完整列表    ['abcd', 786, 2.23, 'run', 70.2]
        print (list[0])         # 输出列表第一个元素    abcd
        print (list[1:3])       # 从第二个开始输出到第三个元素     [786, 2.23]
        print (list[2:])        # 输出从第三个元素开始的所有元素    [2.23, 'run', 70.2]
        print (tinylist * 2)    # 输出两次列表    [123, 'run', 123, 'run']
        print (list + tinylist) # 连接列表   ['abcd', 786, 2.23, 'run', 70.2, 123, 'run']
        print(list1[-5:]) # 从第一元素取至最后一个,-5就是第一个元素['abcd', 786, 2.23, 'run', 70.2]    
        print(list[-5::2]) #增加步长,隔一个取一个   ['abcd', 2.23, 70.2]
        print(list[-1::-2])# 倒着取值    [70.2, 2.23, 'abcd']
        print(list[-1: ])    [70.2]
       
    2.li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        li[2:5] = [11, 22, 33, 44, 55]
        print(li)
        结果:[1, 2, 11, 22, 33, 44, 55, 6, 7, 8, 9]
    

    三、列表操作

    1. 添加

    注意, list和str是不一样的. lst可以发生改变. 所以直接就在原来的对象上进行了操作

    (1) append() - 尾部追加
    lst = ["麻花藤", "林林俊杰", "周润发", "周芷若"]
    print(lst)
    lst.append("wusir")
    print(lst)
    
    lst = []
    while True:    
        content = input("请输入你要录入的员工信息, 输入Q退出:")
        if content.upper() == 'Q':
                break    
        lst.append(content)
    print(lst)
    
    备注:
        append()是浅拷贝
        >>>alist = []
        >>> num = [2]
        >>> alist.append( num )
        >>> id( num ) == id( alist[0] )
        True
        如果使用 num[0]=3,改变 num 后,alist[0] 也随之改变。
        如不希望,需要使用 alist.append( copy.deepcopy( num ) )
    
    (2) insert() - 插入
    lst = ["麻花藤", "张德忠", "孔德福"]
    lst.insert(1, "刘德华")    # 在1的位置插入刘德华. 原来的元素向后移动一位
    print(lst)
    
    (3) extend() - 列表扩展
    用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    
    1. 语法
        list.extend(seq)
        - seq:元素列表,可以是列表/元组/集合/字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾
    
    2. 案例
        list1 = ['Google', 'Runoob', 'Taobao']
        list2=list(range(5)) # 创建 0-4 的列表
        list1.extend(list2)  # 扩展列表
        print ("扩展后的列表:", list1)
        扩展后的列表: ['Google', 'Runoob', 'Taobao', 0, 1, 2, 3, 4]
    
    3. 其他案例
        # 语言列表
        language = ['French', 'English', 'German']
        # 元组
        language_tuple = ('Spanish', 'Portuguese')
        # 集合
        language_set = {'Chinese', 'Japanese'}
    
        # 添加元组元素到列表末尾
        language.extend(language_tuple)
        print('新列表: ', language)
        新列表:  ['French', 'English', 'German', 'Spanish', 'Portuguese']
        
        # 添加集合元素到列表末尾
        language.extend(language_set)
        print('新列表: ', language)
        新列表:  ['French', 'English', 'German', 'Spanish', 'Portuguese', 'Japanese', 'Chinese']
    

    2. 删除

    (1) pop()
    用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值;list.pop([index=-1])
    
    lst = ["麻花藤", "王剑林林", "李李嘉诚", "王富贵"]
    print(lst)
    # 默认删除最后一个
    deleted = lst.pop()         
    print("被删除的", deleted)
    print(lst)
    结果:
        ['麻花藤', '王剑林林', '李李嘉诚', '王富贵']
        被删除的 王富贵
        ['麻花藤', '王剑林林', '李李嘉诚']
    
    # 删除2号元素
    el = lst.pop(2)     
    print(el)
    print(lst)
    
    (2) remove()
    用于移除列表中某个值的第一个匹配项
    
    # 删除指定元素
    lst.remove("麻花藤")   
    print(lst)
    # 删除不存在的元素会报错
    lst.remove("哈哈")    
    print(lst)
    Error: ValueError: list.remove(x): x not in list
    
    (3) clear()
    - 清空list
    
    (4) 切片删除
    del lst[1:3]
    print(lst)
    

    3. 修改

    lst = ["太白", "太黑", "五色", "银王", "日天"]
    lst[1] = "太污"   # 把1号元素修改成太污
    print(lst)
    
    lst[1:4:3] = ["麻花藤", "哇靠"]     # 切片修改也OK. 如果步长不是1, 要注意元素的个数
    print(lst)
    
    lst[1:4] = ["李李嘉诚个龟儿子"]  # 如果切片没有步长或者步长是1. 则不用关心个数
    print(lst)
    

    4. 查询

    1. index()
    
    2.for el in lst:    
        print(el)
    

    四、其他操作

    1. count()

    list.count(obj) #语法
    
    aList = [123, 'Google', 'Runoob', 'Taobao', 123];
    print ("123 元素个数 : ", aList.count(123))
    print ("Runoob 元素个数 : ", aList.count('Runoob'))
    /结果:
    123 元素个数 :  2
    Runoob 元素个数 :  1
    

    2. len()

    len(len) # 方法,返回列表个数
    list1 = ['Google', 'Runoob', 'Taobao']
    print (len(list1))
    list2=list(range(5)) # 创建一个 0-4 的列表
    print (len(list2))
    /结果:
    3
    5
    

    3. list()

    aTuple = (123, 'Google', 'Runoob', 'Taobao')
    list1 = list(aTuple)
    print ("列表元素 : ", list1)
    
    str="Hello World"
    list2=list(str)
    print ("列表元素 : ", list2)
    /结果:
    列表元素 :  [123, 'Google', 'Runoob', 'Taobao']
    列表元素 :  ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
    

    4. reverse()

    函数用于翻向列表中元素
    
    list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
    list1.reverse()
    print ("列表反转后: ", list1)
    /结果:
    列表反转后:  ['Baidu', 'Taobao', 'Runoob', 'Google']
    

    5. sort()

    list.sort(cmp=None, key=None, reverse=False)#该方法没有返回值,但是会对列表的对象进行排序
    cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
    key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)
    
    
    aList = ['Google', 'Runoob', 'Taobao', 'Facebook']
    aList.sort()
    print ( "List : ", aList)
    /结果:
    List :  ['Facebook', 'Google', 'Runoob', 'Taobao']
    
    
    vowels = ['e', 'a', 'u', 'o', 'i']# 降序
    vowels.sort(reverse=True)
    print ( '降序输出:', vowels )
    /结果:
    降序输出: ['u', 'o', 'i', 'e', 'a']
        
    列表的嵌套
    li = ['李娜', '韩寒', 'aliex', ['妮妮', 23,'北京']]
    print(li[1][1]) # 取韩寒中的寒字
    li[0] = li[0].capitalize() # 找的lina首字母大写,并将li中的lina替换掉
    print(li)
    li[1] = li[1].replace('韩', '国') # 将韩寒的韩改成国
    print(li)
    n = [1, 2, 'jack', 4, 5, 5, 6, 7, 78, 8, 9, 9]
    n[3:4] = 'tony alix'
    print(n)
    [1, 2, 'jack', 't', 'o', 'n', 'y', ' ', 'a', 'l', 'i', 'x', 5, 5, 6, 7, 78, 8, 9, 9]
    n[3:4] = ['tony', 'jone']
    print(n)
    [1, 2, 'jack', 'tony', 'jone', 5, 5, 6, 7, 78, 8, 9, 9]
    

    6. join

    将列表转换为字符串
    
    li = ["李嘉诚", "麻花藤", "林海峰", "刘嘉玲"]
    s = "_".join(li)   # 循环遍历列表,把列表中的每一项用''_''拼接
    print(s)
    结果:
    李嘉诚_麻花藤_林海峰_刘嘉玲
    li = "花闺"
    s = "_".join(li)
    print(s)
    结果:
    花_闺
    

    7. 列表循环删除

    li = ['周芷若', '王兴', '周润发', '马云', '周星星']
    li_new = [] # 创建一个新列表存储要删除的元素
    
    for el in li: # 循环li,把姓周的装进li_new
        if el.startswith('周'):
            li_new.append(el)
    
    for el_new in li_new: # 循环新列表,删除li中的元素
        li.remove(el_new)
    print(li)
    结果:['王兴', '马云']
    

    8. 列表浅拷贝

    1. old = [1,[2,3]]
       new = old.copy()
    
    2. old = [1,[2,3]]
      new = [i for i in old]
    
    3. old = [1,[2,3]] 
       new = []
       for i in old:
            new.append(old[i])
    
    4. old = [1,[2,3]]
       new = old[:]
    
  • 相关阅读:
    03-TypeScript中的强类型
    02-TypeScript中新的字符串
    01-TypeScript概述
    2.WF 4.5 流程引擎设计思路
    1.WF 4.5在项目中直接使用的问题
    领域驱动设计-划分界限上下文
    领域驱动设计-软件挑战与应对
    领域驱动设计-基本概念
    领域驱动设计-序言
    从程序员的防猝死,思考码农身后的家庭保障
  • 原文地址:https://www.cnblogs.com/hq82/p/11331599.html
Copyright © 2011-2022 走看看