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)

 

posted @ 2021-04-18 15:23  thoustree  阅读(99)  评论(0编辑  收藏  举报
返回顶部