美文网首页
python之08-list列表

python之08-list列表

作者: 文娟_狼剩 | 来源:发表于2019-07-25 20:51 被阅读0次

    详细请参考:https://www.cnblogs.com/Neeo/articles/11212368.html

    1、列表的基本操作

    1>创建列表

    在Python中,用一对中括号[]来表示列表(list),用,分割列表内的每个元素。

    li = []
    print(li)  # []
    print(type(li))  # <class 'list'>
    print(list('dsdfgfrwe'))  # ['d', 's', 'd', 'f', 'g', 'f', 'r', 'w', 'e']
    print(list(range(10)))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(list(range(1,11))) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    print(list(range(1,11,2))) #[1, 3, 5, 7, 9]
    

    练习:打印1--100之间的奇数

    for i in range(1,101,2):
        print(i) 
    
    2>列表的合并(拼接):+

    合并(拼接)就是将两个列表合为一个新列表,原有列表不变。

    li_1 = [1, 2, 3]
    li_2 = ['a', 'b', 'c']
    li_3 = li_1 + li_2
    print(li_3)  # [1, 2, 3, 'a', 'b', 'c']
    
    3>列表的重复

    重复可以理解为将原列表复制指定次数,然后相加得到一个新的列表。

    li_1 = [1, 2, 3]
    li_2 = li_1 * 3
    print(li_2)  # [1, 2, 3, 1, 2, 3, 1, 2, 3]
    
    4>列表成员资格判断:in,not in
    li = ['a', 'b', 'we', 2, 5]
    print('a' in li)  # True
    print('w' not in li)  # True
    print(5  not in li)  # False
    print('we' in li)  # True
    
    5>通过索引或切片取值
    lis = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    # 从索引为3的值
    print(lis[3])  # d
    # 从指定索引位置开始取值
    print(lis[3:])  # ['d', 'e', 'f', 'g']
    # 取列表内的一段元素
    print(lis[3:6])  # ['d', 'e', 'f']
    # 每隔两个取一个
    print(lis[1:6:2])  # ['b', 'd', 'f']
    # 取索引为-2的元素
    print(lis[-2])  # f
    # 从左向右取,从0开始,取到倒数第二个之前的
    print(lis[:-2])  # ['a', 'b', 'c', 'd', 'e']
    # 反转列表
    print(lis[::-1])  # ['g', 'f', 'e', 'd', 'c', 'b', 'a']
    
    6>for循环取值
    lis = [ 'e', 'f', 'g']
    for i in lis:
        print(i)
        
    #执行结果
    e
    f
    g
    
    7>列表元素更新
    lis = [ 'e', 'f', 'g']
    print(lis,id(lis))   #['e', 'f', 'g'] 2365512770120
    lis[2]='wwj'
    print(lis,id(lis))  #['e', 'f', 'wwj'] 2365512770120
    

    注:通过指定的索引修改列表中对应的元素,并且通过打印结果发现,当列表内的元素被修改后,列表的内存地址不变。

    8>删除列表(元素)
    li = ['b', 'a', 'c', 'f', 'd']
    del li[0], li[2]
    print(li)  # ['a', 'c', 'd']
    

    2、列表的常用方法

    2.1 list.append(obj)

    将一个对象(元素)追加到列表的末尾,并且是原地操作列表,没有返回值

    li =[1,2]
    li.append('abc')
    print(li)   #[1, 2, 'abc']
    
    2.2 list.insert(index,obj)

    将一个对象(元素)插入到列表的指定索引的前面,并且是原地操作列表,没有返回值

    li = ['a', 'b', 'c', 'd']
    li.insert(1, 1)
    print(li)  # ['a', 1, 'b', 'c', 'd']
    

    注:在指定索引的前面插入一个元素,后面的元素都要往后移动一位,如果列表长度很长的话,会对性能有所影响。

    2.3 list.pop([obj])

    移除列表中的指定索引位置的元素,若不指定索引,默认移除列表尾部的元素,并且将列表返回

    li = ['a', 'b', 'c', 'd']
    li.pop()  # 不指定默认移除最后一个
    print(li)  # ['a', 'b', 'c']
    print(li.pop(0))  # 移除指定的元素   a
    print(li)  # ['b', 'c']
    
    2.4 list.remove(obj)

    删除列表中的指定元素,不指定或指定元素不存在报错,而且仅是删除操作,没有返回值。

    li = ['a', 'b', 'c', 'd']
    li.remove('a')
    li.remove('c')
    print(li)  #['b', 'd']
    li.remove(1)  #ValueError: list.remove(x): x not in list
    

    注:list.remove(obj)和list.pop([obj])的区别?

    • list.remove(obj)只能通过元素删除,不能通过索引删除
    • list.pop([obj])只能通过索引删除
    2.5 list.reverse()

    反转列表,并没有参数和返回值,只是在原地对列表中的元素进行反转。

    li = ['b', 'a', 'c', 'f', 'd']
    print(li[::-1])  # ['d', 'f', 'c', 'a', 'b']
    li.reverse()
    print(li)  # ['b', 'a', 'c', 'f', 'd']
    
    2.6 list.sort(key=None, reverse=False)

    原地对列表进行排序,key是自定义的排序算法,此函数在每次元素比较时被调用,reverse表示排序方式,默认的false是按照升序进行排序的,当reverse=True时,排序结果为降序。

    li = ['b', 'a', 'c', 'f', 'd']
    li.sort()  # 顺序,['a', 'b', 'c', 'd', 'f']
    print(li)
    li.sort(reverse=True)  # 倒序,['f', 'd', 'c', 'b', 'a']
    print(li)
    

    注:sorted(key=None, reverse=False)函数,它是Python内置的对于所有序列类型进行排序的函数,而不像sort()方法是列表独有的排序方法。
    二者区别是:

    • sort方法仅能对列表进行原地排序,没有返回值。
    • sorted函数对所有序列类型进行排序,并且并不是原地排序,它会返回排序结果,也就是说我们可以通过一个变量接收排序结果。

    3、列表总结

    3.1 列表中常用的操作符
    操作符(表达式) 描述 重要程度
    + 合并 **
    * 重复 **
    in 成员资格 ****
    for i in [1, 2, 3]:print(i) 迭代 *****
    list[2] 索引取值 *****
    list[start:stop:step]、list[::-1] 切片(截取) *****
    3.2 列表中的常用方法:
    方法 描述 重要程度
    list.append(obj) 列表添加元素到末尾 *****
    list.insert(index,obj) 列表添加元素到指定位置 *****
    list.pop(obj) 删除列表元素 *****
    list.remove() 删除列表元素 *****
    list.reverse() 反转列表的元素 ****
    list.sort() 排序 ***
    list(seq) 将序列转换为列表 *****
    list.extend(seq) 列表末尾追加多个值 ***
    list.count(obj) 统计某个字符在列表内出现的次数 ****
    list.index(obj) 找出指定元素的第一个匹配项的索引位置 ***
    3.3 可以应用于列表的其他置函数或者声明语句
    函数 描述 重要程度
    len(list) 返回列表的元素个数 *****
    max(list) 返回列表内最大的元素 **
    min(list) 返回列表内最小的元素 **
    cmp(list1, list2) 比较两个列表的元素 **
    del obj1, obj2 删除列表的元素 ****

    练习题:

    1>写代码,有如下列表,按照要求实现每一个功能
    li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
    #   计算列表的长度并输出
    print("列表的长度:{}".format(len(li)))
    #   列表中追加元素"seven",并输出添加后的列表
    li.append('seven')
    print("列表中追加元素'seven'之后,显示为:{}".format(li))
    #   请在列表的第1个位置插入元素"Tony",并输出添加后的列表
    li.insert(0, 'Tony')
    print("列表的第1个位置插入元素'Tony',显示为:".format(li))
    #   请修改列表第2个位置的元素为"Kelly",并输出修改后的列表
    li[2] = 'Kelly'
    print("修改列表第2个位置的元素为'Kelly',显示为:".format(li))
    #   请将列表l2=[1,"a",3,4,"heart"]的每一个元素添加到列表li中,一行代码实现,不允许循环添加。
    l2 = [1, "a", 3, 4, "heart"]
    print(li + l2)
    #   请将字符串s = "qwert"的每一个元素添加到列表li中,一行代码实现,不允许循环添加。
    s = "qwert"
    print(li + list(s))
    #   请删除列表中的元素"ritian",并输出添加后的列表
    li.remove("ritian")
    print(li)
    #   请删除列表中的第2个元素,并输出删除的元素和删除元素后的列表
    new_li = li[2]
    li.remove(new_li)
    print("列表中的第二个元素:{}".format(new_li))
    print(li)
    #   请删除列表中的第2至4个元素,并输出删除元素后的列表
    new_li = li[2: 4]
    print("第2至4个元素:{}".format(new_li))
    for item in new_li:
        li.remove(item)
    print("删除第2至4个元素之后的列表:{}".format(li))
    #   请将列表所有得元素反转,并输出反转后的列表
    li.reverse()
    print(li)
    #   请计算出"alex"元素在列表li中出现的次数,并输出该次数。
    print(li.count("alex"))
    
    2>写代码,有如下列表,利用切片实现每一个功能
    liqs = [1, 3, 2, "a", 4, "b", 5, "c"]
    #   通过对li列表的切片形成新的列表liq1,liq1 = [1,3,2]
    print(liqs[:3])
    #   通过对li列表的切片形成新的列表liq2,liq2 = ["a",4,"b"]
    print(liqs[3:6])
    #   通过对li列表的切片形成新的列表liq3,liq3 = ["1,2,4,5]
    print(liqs[::2])
    #   通过对li列表的切片形成新的列表liq4,liq4 = [3,"a","b"]
    print(liqs[1:6:2])
    #   通过对li列表的切片形成新的列表liq5,liq5 = ["c"]
    print(liqs[len(liqs) - 1:])
    #   通过对li列表的切片形成新的列表liq6,liq6 = ["b","a",3]
    print(liqs[::-1][2::2])
    

    扩展:list递归调用

    1>将列表中的数字3变成字符串"100"。

    lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
    
    def fun_str(li):
        #定义变量从0开始
        num = 0
        for item in li:
            # 判断是否是列表
            if isinstance(item, list):
                return fun_str(item)
            else:
                if item == 3:
                    li[num] = 100
            num += 1
    
    #调用函数
    fun_str(lis)
    print(lis)      
    
    #执行结果
    [2, 100, 'k', ['qwe', 20, ['k1', ['tt', 100, '1']], 89], 'ab', 'adv']
    

    2>将列表lis中的"tt"变成大写。

    # # 方法1:能实现,但嵌套特别多的时候,就很麻烦,并且不灵活
    lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
    lis[3][2][1][0] = lis[3][2][1][0].upper()
    print(lis)   
    #执行结果:[2, 3, 'k', ['qwe', 20, ['k1', ['TT', 3, '1']], 89], 'ab', 'adv']
    
    # 方法2:递归循环
    lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
    
    def fun_str(li):
        #定义变量从0开始
        num = 0
        for item in li:
            #判断是否是列表
            if isinstance(item, list):
                return fun_str(item)
            else:
                if item == "tt":
                    li[num] = li[num].upper()
            num += 1
    
    #调用函数
    fun_str(lis)
    print(lis)
    #执行结果
    [2, 3, 'k', ['qwe', 20, ['k1', ['TT', 3, '1']], 89], 'ab', 'adv']
    

    未完……

    相关文章

      网友评论

          本文标题:python之08-list列表

          本文链接:https://www.haomeiwen.com/subject/zavkrctx.html