• Python列表


    1. 列表概述

      列表是Python基本数据结构——序列。索引、 切片、 相加、 相乘和成员资格检查等序列通用操作也适用于列表。

    2. 使用列表的注意事项

    2.1 列表的引用

      变量:变量是指向某个值的名称(符号)。

      引用: 变量和对象之间的关联称为引用。引用是一个值,指向某些数据。

      将列表赋值给变量实际是将列表的引用赋值给变量。
        在下面这个例子中,有两个对同一个对象的引用。如果一个对象有多个引用,那它也会有多个名称,我们称这个对象是有别名的 。
        如果一个有别名的对象是可变的,对其中一个别名的改变对影响到其它的别名

    >>> a = [1, 2, 3]
    >>> b = a
    >>> b is a
    True
    >>> b[0] = 42
    >>> a
    [42 , 2, 3]

       对于不可变对象,比如字符串,则没有这个问题

    2.2 copy()和 deepcopy()函数

      要让ab指向不同的列表,就必须将b关联到a的副本,可以用copy()函数避免2.1产生的问题

    >>> import copy
    >>> spam = ['A', 'B', 'C', 'D']
    >>> cheese = copy.copy(spam) # spam 和 cheese 变量指向独立的列表(即另一个列表)
    >>> cheese[1] = 42
    >>> spam
    ['A', 'B', 'C', 'D']
    >>> cheese
    ['A', 42, 'C', 'D']

      如果列表中还包括列表(可变对象),可以用deepcopy()函数避免相关问题,详见Python字典一节。

    2.3 就地修改

      列表append方法就地修改列表。就地修改意味着它不会返回修改后的新列表(返回None),而是直接修改旧列表。其他一些列表方法也有这个性质

    >>> x = [1,2,3]
    >>> y = x.append(4) # 不应这样操作
    >>> print(y)
    None
    >>> x
    [1, 2, 3, 4]

    3. 列表常用方法及代码实践(源自《Python编程快速上手  让繁琐工作自动化》)

    # (列表)list_to_str.py
    '''
    假定有下面这样的列表:
    spam = ['apples', 'bananas', 'tofu', 'cats']
    编写一个函数,它以一个列表值作为参数,返回一个字符串。该字符串包含所有表项,
    表项之间以逗号和空格分隔,并在最后一个表项之前插入 and。例如,将前面的 spam 列表传递给函数,
    将返回'apples, bananas, tofu, and cats'。但你的函数应该能够处理传递给它的任何列表。
    '''
    # 关键是先在列表倒数第二的位置添加'and',再用字符串方法join,','join(seq)合并列表
    # 仅能处理该题目,要处理任何列表有待改进
    
    spam = ['apples', 'bananas', 'tofu', 'cats']
    
    def list_to_str(lis):
        lis.insert(-1, 'and')
        lis=(' ').join(lis) # 注意两个单引号里面是有个英文空格
        print(lis)
        return lis
        
        
    if __name__ == '__main__': 
        list_to_str(spam)
    # (列表)copy_matrix.py
    
    '''
    假定有一个列表的列表, 内层列表的每个值都是包含一个字符的字符串, 像这样:
    grid = [['.', '.', '.', '.', '.', '.'],
    ['.', 'O', 'O', '.', '.', '.'],
    ['O', 'O', 'O', 'O', '.', '.'],
    ['O', 'O', 'O', 'O', 'O', '.'],
    ['.', 'O', 'O', 'O', 'O', 'O'],
    ['O', 'O', 'O', 'O', 'O', '.'],
    ['O', 'O', 'O', 'O', '.', '.'],
    ['.', 'O', 'O', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.']]
    你可以认为 grid[x][y]是一幅“图” 在 x、 y 坐标处的字符, 该图由文本字符组成。 
    原点(0, 0)在左上角, 向右 x 坐标增加, 向下 y 坐标增加。复制前面的网格值, 编写代码用它打印出图像。
    ..OO.OO..
    .OOOOOOO.
    .OOOOOOO.
    ..OOOOO..
    ...OOO...
    ....O....
    '''
    # 先打印矩阵第一列然后第二列,循环索引先后顺序要注意才能打印正确
    grid = [['.', '.', '.', '.', '.', '.'],
    ['.', 'O', 'O', '.', '.', '.'],
    ['O', 'O', 'O', 'O', '.', '.'],
    ['O', 'O', 'O', 'O', 'O', '.'],
    ['.', 'O', 'O', 'O', 'O', 'O'],
    ['O', 'O', 'O', 'O', 'O', '.'],
    ['O', 'O', 'O', 'O', '.', '.'],
    ['.', 'O', 'O', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.']]
    
    def copy_matrix(matrix):
        count=0  # 到一定行数换行打印顶的计数
        for j in range(len(matrix[0])):
            for i in range(len(matrix)):
                           print(matrix[i][j],end='') #这里的嵌套循环索引先后顺序要注意
                           count+=1
                           if count%len(matrix) == 0:
                               print('')   
                          
                           
    if __name__ == '__main__': 
        copy_matrix(grid)
    作者:南宫恨

    正是江南好风景,落花时节又逢君

  • 相关阅读:
    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类
    android程序与java程序的差别。
    android的json解析
    java数组转list,list转数组。
    java中字符串常量,堆栈的区别和字符串函数intern(),String s=new String(“abc”)中abc在内存的分配
    AsyncTask学习
    关于自定义拦截器配置,及拦截器的作用范围
    struts2中的文件上传和文件下载
    Struts2的配置及入门案例
    Action中动态方法的调用 Action中通配符的使用 Result的配置
  • 原文地址:https://www.cnblogs.com/ydkh/p/14673111.html
Copyright © 2020-2023  润新知