zoukankan      html  css  js  c++  java
  • 列表和元组

    列表

    本质

    列表在底层是一个动态顺序表结构(连续内存),使用分离法,元素外置的方法存储:

    • 元素值使用随机内存地址保存(因为列表需要能保存不同基础类型的元素,所以需使用元素外置)
    • 顺序表真正存储的是指向元素值的地址
    • 动态扩容的策略(其中一种 加倍扩充):
      • 初次申请空列表 会开辟8个元素的容量大小
      • 当列表扩充空间不够时,则会以4倍基础大小重新申请新的内存,再将原存储区的数据搬到新的内存地址,然后释放原存储区内存;
      • 当容量超过50000,则改为1倍来扩充

    常规操作

    列表组合 list1+list2 返回新的列表list3

    列表的重复: list1*3 ,重复打印三次,返回一个新的列表

    列表的截取 list1[:] list1[::-1] :列表翻转

    1 li = [1,2,3,4,5]
    2 print(li[:3:-1])
    3 >>[5]
    4 print(li[1:3:-1])
    5 >>[]
    6 print(a[2:3:-1])
    7 >>[]
    8 step为-1,只会倒着从后面开始取

    列表常用函数

    list.append(x) 原列表末尾追加新元素,函数返回为空

    list.extend(iterable) iterable: 可迭代对象; 将可迭代对象中的元素取出,分开加入列表

    list.insert(index,x) 在指定的下标处插入元素,原来该位置的元素往后移

    list.pop(index) 删除指定下标的元素,若下标不存在则报错 index默认为-1,即默认删除最后一个, 函数返回删除的那个元素.

    list.remove(x) 移除列表中某个元素的第一个匹配结果, 若匹配不到则报错,函数返回为空

    del list 删除列表

    list.clear() 清空列表中的所有元素,列表还存在

    list.index(x,start,stop) 从指定范围的列表中找出x第一匹配的索引值,若不指定范围,则是整个列表

    list.count(x) 统计列表中x元素出现的次数

    len(list) 获取列表长度

    max(list) 返回列表中最大元素 min(list) 返回最小

    list.reverse() 列表倒叙,翻转

    list.sort(reverse=False) 对列表中的元素进行排序,默认升序,若reverse=True,则为降序

     

    列表切片

    列表切片后得到的还是一个列表,占用新的内存地址

    切片只是浅拷贝:当取出切片的结果时,它是一个独立对象,但它拷贝的是原列表中元素的引用,所以,当存在变长对象的元素时,对其修改会影响源列表

    列表切片的赋值:可以直接对切片进行赋值,从而修改原列表,但赋值对象只能是可迭代对象,它会先删除原列表中切片的元素,再将可迭代对象拆散插入到切片的位置

    li = [1,2,3,6,5,4]
    li[2:4] = [100,200,300]
    print(li)  # 结果>>> [1, 2, 100, 200, 300, 5, 4]

    列表拷贝

    赋值拷贝:

    为引用拷贝 引用同一个列表,地址一样

    list1 = [1,2,3]

    list2=list2

    浅拷贝:

    list2=list1.copy()

    为一维内存拷贝,开辟一块新的内存空间

    若出现二维列表时,由于在一维列表中储存的是列表的地址

    所以当二维列表的时候,又是操作的同一块区域

    深拷贝:

    import copy

    list2=copy.deepcopy(list1)

    深拷贝是一个完全的内存拷贝,将list1中的所有元素拷贝了一份存入新地址,不会出现同时操作同一块内存的情况.

     

    列表枚举函数 :enumerate(列表)

    enumerate(obj,start) obj 可迭代对象,start 下标起始位置 默认为0

    for index, x in enumerate(list1) 同时遍历下标与元素

    print(index,x)

     

    元组

    修改元组

    元组是不可修改的,存储到元组中的列表其实是存储的是列表的地址,这个地址无法修改,但是列表里的元素可以进行修改,而列表地址是不变的

     

    对元组的元素进行排序

    元组是不可改变的,但能对其元素排序生成新的元组

    sorted(t)  # 返回排序后的新元组

    对多个元组进行排序

    t = [(3,5),(1,4),(6,3),(3,1)]
    t.sort()
    print(t)  # [(1, 4), (3, 1), (3, 5), (6, 3)]

    作者: Deaseyy

    出处: http://www.cnblogs.com/Deaseyy/

    新手一枚,请大佬们多多赐教!

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接

  • 相关阅读:
    如果你想开发一个应用(1-17)
    如果你想开发一个应用(1-16)
    如果你想开发一个应用(1-15)
    0079 Ehcache 3.x应用入门及通过JCache与Spring整合
    0078 Java与MySQL时间戳传递/存储/协调问题--userLegacyDatetimeCode--userTimezone--serverTimezone
    0077 web.xml中配置Spring MVC时,Servlet-name上报Servlet should have a mapping的错误
    0076 判断回文串
    0075 字符串的反转
    0074 几道面试题
    0073 javacTask: 源发行版 1.8 需要目标发行版 1.8
  • 原文地址:https://www.cnblogs.com/Deaseyy/p/10859652.html
Copyright © 2011-2022 走看看