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

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的参数传递对于可变对象实际上是引用传递。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容