7.列表切片及复制

列表切片

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列表的值没有变。

原文地址:https://www.cnblogs.com/pangbing/p/8746567.html