zoukankan      html  css  js  c++  java
  • Python序列结构--列表(一)

    列表

    列表**包含若干元素的有序连续内存空间**,当列表增加或删除元素时,**列表对象自动进行内存的扩展或收缩**,从而**保证相邻元素之间没有缝隙**。但插入和删除非尾部元素时涉及列表元素大量的移动,会严重影响效率,因此尽量从尾部进行元素的追加与删除操作

    同一列表中的元素的数据类型可以各不相同,例如:
    >>> [10,20,30,40]
    [10, 20, 30, 40]
    >>> ['crounchy frog','ram bladder','lark vomit']
    ['crounchy frog', 'ram bladder', 'lark vomit']
    >>> ['spam',2.0,5,[20,30]]
    ['spam', 2.0, 5, [20, 30]]
    >>> [['file1',200,7],['file2',260,9]]
    [['file1', 200, 7], ['file2', 260, 9]]
    **python采用基于值的自动内存管理模式,变量并不直接存值,而是存储值的引用或内存地址**

    列表的创建与删除

    • 使用“=”直接将一个列表赋值给变量即可创建列表对象,也可以使用list()函数把元组、range对象、字符串、字典集合或其他可迭代对象转换为列表

      >>> a_list = ['a','b','mpilgrim']
      >>> a_list = [] # 创建空列表
      >>> x = list() # 创建空列表
      >>> x
      []
      >>> list((3,5,4,9,3,8))
      [3, 5, 4, 9, 3, 8]
      >>> list(range(1,10,2))
      [1, 3, 5, 7, 9]
      >>> list(range(1,9,2))
      [1, 3, 5, 7]
      >>> list('hello world')
      ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
      >>> list({3,5,7})
      [3, 5, 7]
      >>> list({'a':3,'b':9,'c':78})
      ['a', 'b', 'c']
      >>> list({'a':3,'b':9,'c':78}.items())
      [('a', 3), ('b', 9), ('c', 78)]
    • 当一个列表不再使用时,可以使用del命令将其删除,这一点适用于所有类型的Python对象,del命令并不删除变量对应的值,只是删除变量并解除变量和值绑定。Python内部每个值都维护一个计数器,每当有新的变量引用该值时其引用计数器加1,当该变量删除或不再引用该值时其计数器减1,当某个值的计数器变为0时则垃圾回收器负责清理和删除。如果需要立即进行垃圾回收,可以导入gc模块后调用collect()方法

      >>> x = [1,2,3]
      >>> del x # 删除列表对象
      >>> x
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      NameError: name 'x' is not defined

      >>> import sys
      >>> sys.getrefcount(1) # 查看值的引用对象
      97
      >>> x = 1
      >>> sys.getrefcount(1) # 有新变量引用该值,其计数器加1
      98
      >>> y = 1
      >>> sys.getrefcount(1)
      99
      >>> del x
      >>> sys.getrefcount(1) # 删除变量并解除引用,其计数器减1
      98
      >>> del y
      >>> sys.getrefcount(1)
      97

      >>> import gc
      >>> gc.collect() # 立刻进行垃圾回收,返回被清理的对象数量
      0

    列表元素的访问

    创建列表之后,可以使用整数作为下标来访问其中的元素,支持双向索引。
    >>> x = list('Python')
    >>> x
    ['P', 'y', 't', 'h', 'o', 'n']
    >>> x[0]
    'P'
    >>> x[-1]
    'n'
    >>> x[1]
    'y'
    >>> x[-2]
    'o'

    列表常用方法

    列表对象常用的方法
    方法说明
    append(x) 将x追加至列表尾部
    extend(L) 将列表L中所有元素追加至列表尾部
    insert(index, x) 在列表index位置处插入x,index如果超出了列表长度,则在其尾部或头部插入元素x
    remove(x) 在列表中删除第一个值为x的元素
    pop([index]) 删除并返回列表中下标为index的元素,如果不指定index则默认为-1,弹出最后一个元素
    clear() 清空列表,删除列表中的所有元素,保留列表对象
    index(x) 返回列表中第一个值为x的元素的索引,若不存在则抛出异常
    count(x) 返回x在列表中出现的次数
    reverse() 对列表所有元素进行原地逆序
    sort(key=None, reverse=False) 对列表所有元素进行原地排序,key用来指定排序规则,reverse为False表示升序,True表示降序
    copy() 返回列表的浅复制
    append()、insert()、extend()
    >>> x = [1,2,3]
    >>> id(x) # 查看对象的内存地址
    1513107356296
    >>> x.append(4) # 在尾部追加元素
    >>> x
    [1, 2, 3, 4]
    >>> x.insert(0,0) # 指定位置插入元素
    >>> x
    [0, 1, 2, 3, 4]
    >>> x.extend([5,6,7]) # 尾部追加多个元素
    >>> x
    [0, 1, 2, 3, 4, 5, 6, 7]
    >>> id(x)
    1513107356296
    pop()、remove()、clear()
    >>> x = [1,2,3,4,5,6,7]
    >>> x.pop()    # 弹出并返回尾部元素
    7
    >>> x
    [1, 2, 3, 4, 5, 6]
    >>> x.pop(0) # 弹出并返回指定位置的元素
    1
    >>> x
    [2, 3, 4, 5, 6]
    >>> x.clear() # 删除所有元素
    >>> x
    []
    >>> x = [1,2,1,1,2]
    >>> x.remove(2) # 删除首个值为2的元素
    >>> x
    [1, 1, 1, 2]
    >>> del x[3] # 删除指定位置上的元素
    >>> x
    [1, 1, 1]
    count()、index()
    >>> x = [1,2,2,3,3,3,4,4,4,4]
    >>> x.count(2) # 元素2在列表x中出现的次数
    2
    >>> x.count(4)
    4
    >>> x.count(5)
    0
    >>> x.index(3) # 返回3在列表x中首次出现的索引
    3
    >>> x.index(5)
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    ValueError: 5 is not in list
    为避免引发异常而导致程序崩溃,1.使用选择结构确保列表中存在指定元素在调用有关的方法,2.使用异常处理结构
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    from random import sample
    lst = sample(range(100, 1000), 500)
    while True:
       x = input('请输入一个三位数:')
       try:
           assert len(x) == 3, '长度必须为3'
           x = int(x)
           break
       except:
           pass
    if x in lst:
       print('元素{0}在列表中的索引为:{1}'.format(x, lst.index(x)))
    else:
       print('列表中不存在该元素')
       
    # 执行结果
    D:pycodepython_s3venvScriptspython.exe D:/pycode/python_s3/day10/LearnList.py
    请输入一个三位数:11
    请输入一个三位数:1235
    请输入一个三位数:339
    列表中不存在该元素

    Process finished with exit code 0
    # 再次执行结果
    D:pycodepython_s3venvScriptspython.exe D:/pycode/python_s3/day10/LearnList.py
    请输入一个三位数:339
    元素339在列表中的索引为:20

    Process finished with exit code 0
    sort()、revers()
    >>> x = list(range(11))
    >>> x
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> import random
    >>> random.shuffle(x)
    >>> x
    [2, 7, 8, 10, 3, 6, 1, 9, 5, 4, 0]
    >>> x.sort() # 默认规则排序
    >>> x
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> x.sort(key=str) # 按转换为字符串后的大小排序
    >>> x
    [0, 1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> x.sort(key=lambda item:len(str(item)),reverse=True) # 按转换为字符串以后长度降序排序
    >>> x
    [10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> x.reverse()
    >>> x
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 10]
  • 相关阅读:
    如何定义开发完成?(Definition of Done)
    Git协同工作流介绍
    Git常用命令拾遗
    搭建基于Docker社区版的Kubernetes本地集群
    Mqtt学习指南
    JavaWeb 学习总结
    异常:org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    MySQL 插入中文错误:java.sql.SQLException: Incorrect string value:
    Servlet 中文乱码问题解析及详细解决方法
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/zxbdboke/p/10480151.html
Copyright © 2011-2022 走看看