美文网首页程序员
关于Python列表你可能会忽略的8个知识点

关于Python列表你可能会忽略的8个知识点

作者: Batkid | 来源:发表于2018-09-27 09:50 被阅读0次

1. 用切片来实现拷贝

切片是python中列表非常常见的操作,不仅仅可以用来“切割”列表,还可以优雅的对一个列表进行拷贝。

>>> a = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
>>> a[:]
['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
>>> a[:] is a
False

需要注意的是,这种拷贝只是浅拷贝。

>>> a = ['foo', 'bar', 'baz',[1,3,5]]
>>> a[:]
['foo', 'bar', 'baz', [1, 3, 5]]
>>> b = a[:]
>>> b.append('c')
>>> b
['foo', 'bar', 'baz', [1, 3, 5], 'c']
>>> b[3].append('d')
>>> b
['foo', 'bar', 'baz', [1, 3, 5, 'd'], 'c']
>>> a
['foo', 'bar', 'baz', [1, 3, 5, 'd']]

2. 用列表代替列表中的部分元素

>>> a = ['foo', 'bar', 'baz', 'chic', 'fox', 'cock']

>>> a[1:4]
['bar', 'baz', 'chic']
>>> a[1:4] = [1.1, 2.2, 3.3, 4.4, 5.5]
>>> a
['foo', 1.1, 2.2, 3.3, 4.4, 5.5, 'fox', 'cock']

3. 把一个列表插入到另一个列表,并替换掉插入位置的元素

>>> a = [1, 2, 3]
>>> a[1:2] = [0.1, 0.2, 0.3]
>>> a
[1, 0.1, 0.2, 0.3, 3]

注意被替换元素的序号与切片范围的关系

4. 从某个位置把一个列表插入到另一个列表,不替换任何元素

>>> a = [1, 2, 7, 8]
>>> a[2:2] = [3, 4, 5, 6]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8]

5. 批量删除列表中的元素

还是利用切片来实现

>>> a = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
>>> a[1:5] = []
>>> a
['foo', 'corge']

>>> a = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
>>> del a[1:5]
>>> a

6. extendappend的区别

append(object) 是把参数object当作一个整体的对象加入到list的尾端

>>> a = ['a', 'b']
>>> x = a.append(123)
>>> print(x)
None
>>> a
['a', 'b', 123]

即使这个object是一个可迭代对象

>>> a = ['a', 'b']
>>> a.append([1, 2, 3])
>>> a
['a', 'b', [1, 2, 3]]

extend接受的参数是一个iterable对象,然后把这个iterable对象中的各个元素从尾端加入到列表中。

>>> a = ['a', 'b']
>>> a.extend([1, 2, 3])
>>> a
['a', 'b', 1, 2, 3]

7. List的多数方法返回值都是None

例如
a.append(<obj>)
a.extend(<iterable>)
a.insert(<index>, <obj>)
a.remove(<obj>)
除了pop会返回弹出的那个值之前,上面的方法都是返回的None.

8. 使用列表做方法的默认参数

列表属于mutable 的对象,用列表做方法的默认参数会出现与期望不符的结果

def add_end(L=[]):
   L.append('END')
return L

#正常调用时:
>>> add_end([1, 2, 3])
[1, 2, 3, 'END']
>>> add_end(['x', 'y', 'z'])
['x', 'y', 'z', 'END']

#第一次通过默认参数调用时,也是正常的
>>> add_end()
['END']

#再次调用add_end()时,结果就不对了
>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']

这是因为默认参数L始终指向的同一个对象,而python的参数传递对于可变对象实际上是引用传递。

相关文章

  • 关于Python列表你可能会忽略的8个知识点

    1. 用切片来实现拷贝 切片是python中列表非常常见的操作,不仅仅可以用来“切割”列表,还可以优雅的对一个列表...

  • 几个关于数据结构、字典和列表的小技巧

    每天把学习Python的知识点记录下来 摘要 关于Python的数据结构、字典和列表的小技巧。 正文 1.Pyth...

  • Python的学习过程

    Python的知识点:1/(1)、列表的定义:List (列表)是Python 中使用最频繁的数据类型,在其他语言...

  • 17、python数据结构

    本章节我们主要结合前面所学的知识点来介绍Python数据结构。 列表 Python中列表是可变的,这是它区别于字符...

  • Python入门学习过程(14)

    1. Python中,注释用井号(#)标识,井号后面的内容都会被Python解释器忽略。 2. 列表:...

  • 机器学习训练营---第一周总结

    知识点列表: python基础数据类型 变量和表达式 if , elif , else , continue , ...

  • pip包

    知识点 图方便 import 列表 - python安装 清华大学anaconda帮助网址[https://mir...

  • 10、for循环语句

    上集回顾: 通用序列操作 可变序列操作 连续学习了两集Python列表技能,列表(list)这个可变序列相关知识点...

  • Python 序列 ~ 列表之外的常用序列

    有时候因为列表实在是太方便了,所以 Python 程序员可能会过度使用它。 如果你只需要处理数字列表的话,数组可能...

  • 我的git学习日志

    关于提交规范(git commit conventions) 参考文献: 你可能会忽略的 Git 提交规范Comm...

网友评论

    本文标题:关于Python列表你可能会忽略的8个知识点

    本文链接:https://www.haomeiwen.com/subject/cokroftx.html