美文网首页
Python基础总结-06(列表)

Python基础总结-06(列表)

作者: zxhlcl | 来源:发表于2018-10-08 16:37 被阅读0次

    List

    python中的容器类的数据类型,可以用来存储多个数据,其特点是可变和有序
    可变--列表中的元素值和位置以及列表长度可变(列表可以增删改)
    有序--可以通过下标获取元素
    列表中的元素可以是任何类型的数据;列表同样可以切片
    一、获取列表中的元素
    可以通过下标或者切片的方式获取

    num=[1,2,3,4,5,6,7]
    a=num[0]
    b=num[0:3]
    c=num[::-1]
    print(a,b,c)
    #1 [1, 2, 3] [7, 6, 5, 4, 3, 2, 1]
    

    二、列表的基本操作
    (1)基本操作

    a=len(num) #获取长度
    b=[1,2,3]+[4,5,6] #列表连接
    c=[1,2]*3 #列表重复
    d= 3 in [1,2,3] #列表中的元素
    print(a,b,c,d)
    for x in num: print(x,end= ',') #迭代获取列表元素
    #7 [1, 2, 3, 4, 5, 6] [1, 2, 1, 2, 1, 2] True
    #1,2,3,4,5,6,7,
    

    (2)列表比较
    比较是否相等的两种方式,==和is
    ==判断的是值是否相等,is判断的是地址是否相等

    list1=[1,2,3]
    list2=[1,2,3]
    list3=list1
    print(list1==list2,list1==list3,list1 is list2 ,list1 is list3)
    #True True False True
    #list1和list2在内存开辟了两个空间分别存储,空间地址不同;list1和list3通过赋值的方式执行同一个地址
    

    (3)列表赋值
    用一个列表给另外一个列表赋值的时候,可能会因为修改一个列表的元素影响另一个列表,若不想互相影响可以切片或者复制创建一个新的副本

    list1=[1,11,111]
    list2=list1
    list2.append(1111)
    print(list1,list2)
    
    list3=list1[:]
    list3.pop()
    print(list1,list3)
    #[1, 11, 111, 1111] [1, 11, 111, 1111]
    #[1, 11, 111, 1111] [1, 11, 111]
    

    三、列表的方法
    (1)列表的删除操作
    [list.pop([index=-1])]
    移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

    list01=['利物浦','切尔西','曼联','曼城','阿森纳','热刺']
    a=list01.pop()
    b=list01.pop(2)
    print(a,b,list01)
    #热刺 曼联 ['利物浦', '切尔西', '曼城', '阿森纳']
    

    [list.remove(obj)]
    移除列表中某个值的第一个匹配项,无返回值

    list01=['利物浦','切尔西','曼联','曼城','阿森纳','热刺']
    a=list01.remove('利物浦')
    #None ['切尔西', '曼联', '曼城', '阿森纳', '热刺']
    

    del list[i]
    删除列表中的某一个元素

    list01=['利物浦','切尔西','曼联','曼城','阿森纳','热刺']
    del list01[1]
    print(list01)
    #['利物浦', '曼联', '曼城', '阿森纳', '热刺']
    

    (2)列表的修改
    [list.append(obj)]
    在列表末尾添加新的对象
    [list.insert(index, obj)]
    将对象插入列表
    [list.extend(seq)]
    在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    [list.sort(cmp=None, key=None, reverse=False)]
    对原列表进行排序
    [list.reverse()]
    反向列表中元素
    [list.clear()]
    清空列表中元素
    [list.copy()]
    产生一个列表的副本

    list01=['利物浦','切尔西','曼联','曼城','阿森纳','热刺']
    list01.append('纽卡斯尔');print(list01)
    list01.insert(2,'西汉姆联队');print(list01)
    list01.extend(['尤文图斯','那不勒斯','国际米兰']);print(list01)
    list01.sort();print(list01)  #根据字符串首字符的Unicode码进行比较
    #sort()要求列表中的元素类型一致且能够进行比较运算
    list01.reverse();print(list01)
    list01.clear();print(list01)
    '''
    ['利物浦', '切尔西', '曼联', '曼城', '阿森纳', '热刺', '纽卡斯尔']
    ['利物浦', '切尔西', '西汉姆联队', '曼联', '曼城', '阿森纳', '热刺', '纽卡斯尔']
    ['利物浦', '切尔西', '西汉姆联队', '曼联', '曼城', '阿森纳', '热刺', '纽卡斯尔', '尤文图斯', '那不勒斯', '国际米兰']
    ['切尔西', '利物浦', '国际米兰', '尤文图斯', '曼城', '曼联', '热刺', '纽卡斯尔', '西汉姆联队', '那不勒斯', '阿森纳']
    ['阿森纳', '那不勒斯', '西汉姆联队', '纽卡斯尔', '热刺', '曼联', '曼城', '尤文图斯', '国际米兰', '利物浦', '切尔西']
    []
    '''
    

    (3)其他操作
    [max(list)]:返回列表元素最大值
    [min(list)]:返回列表元素最小值
    [list(seq)]:将元组转换为列表

    list01=['利物浦','切尔西','曼联','曼城','阿森纳','热刺']
    a=max(list01)
    b=min(list01)
    print(a,b)
    for x in list01: print(ord(x[0]),end=' ')
    c=list("123456") #只有序列才能转换成List
    print(c)
    """
    阿森纳 切尔西
    21033 20999 26364 26364 38463 28909 (元素首字母Unicode码)
    ['1', '2', '3', '4', '5', '6']
    """
    

    [list.count(obj)]
    统计某个元素在列表中出现的次数
    [list.index(obj)]
    从列表中找出某个值第一个匹配项的索引位置

    list01=[1,2,[1,2],"字符串",[1,2],1,3,5,6,4,2,2]
    a=list01.index([1,2])
    b=list01.count([1,2])
    print(a,b) # 2 2
    

    思考:sort和sorted的区别??

    (1)sort 是应用在 list 上的方法,属于列表的成员方法,sorted 可以对所有可迭代的对象进行排序操作。
    (2)list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
    (3)sort使用方法为ls.sort(),而sorted使用方法为sorted(ls)
    语法:
    sort(cmp=None, key=None, reverse=False)
    sorted(iterable, cmp=None, key=None, reverse=False)

    补充1:列表推导式
    语法:[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
    实质就是迭代处理表达式

    li = [1,2,3,4,5,6,7,8,9]
    print ([x**2 for x in li])
    print ([x**2 for x in li if x>5])
    print (dict([(x,x*10) for x in li]))
    print([ (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8 ])
    print([x*y for x in [1,2,3] for y in  [1,2,3]])
    '''
    [1, 4, 9, 16, 25, 36, 49, 64, 81]
    [36, 49, 64, 81]
    {1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60, 7: 70, 8: 80, 9: 90}
    [(5, 9), (7, 9), (9, 9)]
    [1, 2, 3, 2, 4, 6, 3, 6, 9]
    '''
    

    补充2:列表切片和切片赋值

    切片是浅拷贝,不影响原序列;
    切片赋值是针对原序列进行操作,改变切片区域的序列
    切片赋值,给序列的切片部分新的赋值必须是可迭代类型

    a = [1, 2, 3]
    b = a[:]  # 切片
    a[1:] = []  # 切片赋值
    #切片[:]在右侧,切片赋值[:]在左侧;
    
    
    #为什么b[:]和b的指针是一样的?因为b[:]=[x+1 for x in a]是切片赋值
    a = [1,2,3]
    # 赋值1
    b = a
    b[:] = [x+1 for x in a]
    print(a,b)
    # 赋值2
    b = [x-1 for x in a]
    print(a,b)
    

    算法题:
    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
    注意:答案中不可以包含重复的三元组。
    例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
    满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2] ]

    #暴力方法,算法复杂度为O(n^3)
     def threeSum(self, nums):
            """
            :type nums: List[int]
            :rtype: List[List[int]]
            """
            temp = []
            for i in range(0, len(nums)-2):
                for j in range(i+1, len(nums)-1):
                    for k in range(j+1, len(nums)):
                        a = nums[i]
                        b = nums[j]
                        c = nums[k]
                        if a+b+c == 0:
                            listnum =sorted([a, b, c])
                            if listnum not in temp:
                                temp.append(listnum)
            return temp
    

    相关文章

      网友评论

          本文标题:Python基础总结-06(列表)

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