列表切片
1.列表的扩展
例子1:
>>> a = [1, 2, 3]
>>> b = ['xiaohong','xiaozhang','xiaoming']
>>> print (a)
[1, 2, 3]
>>> print (b)
['xiaohong', 'xiaozhang', 'xiaoming']
>>> a.extend(b)
>>> print a
[1, 2, 3, 'xiaohong', 'xiaozhang', 'xiaoming']
例子2;我们也可以用 "+" 来实现形同的效果
>>> print a
[1, 2, 3]
>>> print b
['xiaohong', 'xiaozhang', 'xiaoming']
>>> a + b
[1, 2, 3, 'xiaohong', 'xiaozhang', 'xiaoming']
2、切片
切边的原则是顾头不顾尾。我们根据列表的下标来截取指定范围内的数据。
>>>
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
例子1:截取中间位置的数据
>>> a[3:7]
[3, 4, 5, 6]
截取下标3-7的内容,但是不包含下标为7的内容
还可以这样写
print (a[a.index(3):a.index(7)])
[3, 4, 5, 6]
例子2:截取到末尾
>>> a[7:]
[7, 8, 9]
在列表长度未知的情况下,我们还可以用负数来截取。
>>> a[-3:]
[7, 8, 9]
用负数来截取的时候需要注意,不要写成[-2:-4]。写法也要遵循从左到右的顺序。
>>> a[-4:-2]
[6, 7]
例子3:从0位置开始截取
>>> a[:5]
[0, 1, 2, 3, 4]
例子4:步长切片
>>> a = [1,2,3,4,5,6,7,8,9]
>>> print (a[::2]) 从0到-1 从开始到最后步长为2.0和-1可以省略。
[1, 3, 5, 7, 9]
>>> print (a[1::2])
[2, 4, 6, 8]
>>>
3.列表的复制
列表的复制有 "浅复制"和"深复制"之分
例子1:浅复制
>>> a = [1,2,3,4]
>>> b = a.copy()
现在a b 列表内容一样
>>> print (a)
[1, 2, 3, 4]
>>> print (b)
[1, 2, 3, 4]
现在修改a列表的值,不会影响b列表的内容
>>> a[1] = 'zhangsan'
>>> print (a)
[1, 'zhangsan', 3, 4]
>>> print (b)
[1, 2, 3, 4]
但是当a的列表中有子列表的时候就不同了。
>>> print (a)
[1, 2, ['a', 'b', 'c'], 3, 4]
>>> b = a.copy()
>>> print (b)
[1, 2, ['a', 'b', 'c'], 3, 4]
修改列表a中子列表中的值,b的子列表中的值也跟着变化。所有说a.copy()只复制了第一层。所以我们称为浅复制。
>>> a[2][0] = 'xiaoming'
>>> print (a)
[1, 2, ['xiaoming', 'b', 'c'], 3, 4]
>>> print (b)
[1, 2, ['xiaoming', 'b', 'c'], 3, 4]
例子2:深复制
import copy
a = [1,2,['a','b','c'],3,4]
b = copy.deepcopy(a)
>>> print (a)
[1, 2, ['a', 'b', 'c'], 3, 4]
>>> print (b)
[1, 2, ['a', 'b', 'c'], 3, 4]
修改a列表中的子列表的值
a[2][0] = 'xiaoming'
>>> print (a)
[1, 2, ['xiaoming', 'b', 'c'], 3, 4]
>>> print (b)
[1, 2, ['a', 'b', 'c'], 3, 4]
我们发现b列表的值没有变。