1. 列表简单介绍:
- 列表是Python中内置有序、可变序列,列表的所有元素放在一对中括号“[]”中,并使用逗号分隔开;
- 当列表元素增加或删除时,列表对象自动进行扩展或收缩内存,保证元素之间没有缝隙;
- 在Python中,一个列表中的数据类型可以各不相同,可以同时分别为整数、实数、字符串等基本类型,甚至是列表、元组、字典、集合以及其他自定义类型的对象。
[1, 2, 3]
['awng', 'nier', 'dan']
['san', 3.6, 100, [10, 20]]
[['fil', 210], ['file', 20,7]]
2.列表常用方法:
方法 | 说明 |
lst.append(x) | 将元素x添加至列表lst尾部 |
lst.extend(L) | 将列表L中所有元素添加至列表lst尾部 |
lst.insert(index, x) | 在列表lst指定位置index处添加元素x,该位置后面的所有元素后移一个位置 |
lst.remove(x) | 在列表lst中删除首次出现的指定元素,该元素之后的所有元素前移一个位置 |
lst.pop([index]) | 删除并返回列表lst中下标为index(默认为-1)的元素 |
lst.clear() | 删除列表lst中所有元素,但保留列表对象 |
lst.index(x) | 返回列表lst中第一个值为x的元素的下标,若不存在值为x的元素则抛出异常 |
lst.count(x) | 返回指定元素x在列表lst中的出现次数 |
lst.reverse() | 对列表lst所有元素进行逆序 |
lst.sort(key=None, reverse=False) | 对列表lst中的元素进行排序,key用来指定排序依据,reverse决定升序(False),还是降序(True) |
lst.copy() | 返回列表lst的浅复制 |
3.1 列表创建与删除
-
使用“=”直接将一个列表赋值给变量即可创建列表对象
>>> a_list = ['a', 'b', 'mpilgrim', 'z', 'example']
>>> a_list = [] #创建空列表 -
也可以使用list()函数将元组、range对象、字符串或其他类型的可迭代对象类型的数据转换为列表。
>>> a_list = list((3,5,7,9,11))
>>> a_list
[3, 5, 7, 9, 11]
>>> list(range(1,10,2))
[1, 3, 5, 7, 9]
>>> list('hello world')
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
>>> x = list() #创建空列表 -
当不再使用时,使用del命令删除整个列表,如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值。
>>> del a_list
>>> a_list
3.2 列表元素的增加
-
可以使用“+”运算符将元素添加到列表中。
>>> aList = [3,4,5]
>>> aList = aList + [7]
>>> aList
[3, 4, 5, 7]
严格意义上来讲,这并不是真的为列表添加元素,而是创建了一个新列表,并将原列表中的元素和新元素依次复制到新列表的内存空间。由于涉及大量元素的复制,该操作速度较慢,在涉及大量元素添加时不建议使用该方法。 -
使用列表对象的append()方法在当前列表尾部追加元素,原地修改列表,是真正意义上的在列表尾部添加元素,速度较快。
>>> aList.append(9)
>>> aList
[3, 4, 5, 7, 9]
所谓“原地”,是指不改变列表在内存中的首地址。 -
Python采用的是基于值的自动内存管理方式,当为对象修改值时,并不是真的直接修改变量的值,而是使变量指向新的值,这对于Python所有类型的变量都是一样的。
>>> a = [1,2,3]
>>> id(a) #返回对象的内存地址
20230752
>>> a = [1,2]
>>> id(a)
20338208 -
列表中包含的是元素值的引用,而不是直接包含元素值。
如果是直接修改序列变量的值,则与Python普通变量的情况是一样的
如果是通过下标来修改序列中元素的值或通过可变序列对象自身提供的方法来增加和删除元素时,序列对象在内存中的起始地址是不变的,仅仅是被改变值的元素地址发生变化,也就是所谓的“原地操作”。
>>> a = [1,2,4]
>>> b = [1,2,3]
>>> a == b
False
>>> id(a) == id(b)
False
>>> id(a[0]) ==