- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解
( g1 w7 M7 B6 C! L1、可以接收的参数
, W8 _6 T: ]9 }& f: w+ C' X1.1、添加字符串
$ b6 S w1 s, g" G9 H' z1.2、添加元组
+ E* d9 F/ k" ?' r) {" f1.3、添加字典
' d: X2 j* \, a6 m3 v2、原理解析
1 _% s0 C6 G4 j% ?) o! s$ L3、extend() 和 append()、+ 的区别?
' @6 Q9 g9 l, i, \: w4、特殊的添加方式, C8 q3 B Q3 p) J
extend() 可以在列表末尾「添加」另一个「序列」中的值。! U4 q. N5 }; c# T5 N# C0 P! H+ y
) F1 U1 v! F$ z1 ~. s# `' [( n, _; ~
语法
: ]9 v* y3 o3 ~7 l
" R) [" E2 O) qlist.extend( iterable )
- Q* g( c" `0 ?- z3 ]* v7 z" y* _- g, A0 _0 p7 B' F0 Z: T1 i
参数
0 i) F( m% F0 n8 I
! O: s$ ]2 x, Z; Q2 v% o, t: }3 literable :需要添加的元素列表
, Y& i( Q. r( u2 |返回值$ W6 w4 Q! b, c" }" L1 N/ ~
' L& X w. k; j3 b) |. x0 l
没有返回值,只是修改原来的列表+ i# l! {& F" a1 m+ U% Z
实例:向列表中添加另一个列表: i1 O. u/ }2 A" t* _
* }# e$ T, j4 n7 r* ~" Q
list1 = [1, 2, 3]
7 m0 \9 H. [5 l2 L9 a2 R$ D% C! H" _list2 = [4, 5, 6]$ P I# V+ f2 n5 `9 m6 P
+ }) Q' X f$ M" o
list1.extend(list2)
2 u% E5 C- x2 V$ M' _print(list1)3 h- v |- q+ T
% H4 G2 u7 |' d8 V' K- z! r5 m输出:+ Z% o7 D* ^6 ]6 r: }& y Q ~
$ j" I* r3 V; u" Y& h+ C5 r[1, 2, 3, 4, 5, 6]
4 j! _' G! E- p' D& } S9 s0 V$ h$ X
2 W4 }. ]( s1 n' l$ }1、可以接收的参数
6 c& u) f. Y# w6 t/ Fextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
S' I$ K% L# V( h% g9 d! P# q H/ r7 Z
3 Q( Z7 w F2 ]
1.1、添加字符串2 R1 R" x# ?6 v
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。/ _+ b7 j) X A5 \+ d2 U% A9 `$ L
$ P9 d. O. H+ V; w& flist1 = [1, 2, 3]
0 ?& M! @- p6 rstr1 = 'abc'9 _" v4 }: ~! \2 o& ?5 `2 V
" ]6 z* ?# [8 i8 `/ j
list1.extend(str1) c# U: L. I3 w- e3 \) `7 E8 H
print(list1)! s8 M4 y8 q5 M
# K1 N* Q' V) j# k8 q4 }1 v输出:
2 W# e' H H4 E5 J! D S' d9 w1 K
. x# h' B L z2 a[1, 2, 3, 'a', 'b', 'c']. A/ P+ O; h4 @5 z# w7 a- w
( S3 t2 M! {$ E* S/ z/ p. {4 v8 Q& ?
1.2、添加元组& |, E' {% W; @1 O, ^6 Q: x' t! i4 U( ]
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。2 h- ]2 J; S, {0 c% o
7 p/ O9 F; H: l9 @5 e, j
list1 = [1, 2, 3]
5 N2 S3 T- g8 P. O: s" W: \tuple1 = (4, 5, 6)9 J _6 m5 [3 V, _
+ o. e0 v1 z U! hlist1.extend(tuple1)
% g r' U+ }$ u3 T/ Bprint(list1)9 i+ B3 ^" W b3 b2 N% U" v) N) A
' ]5 D7 s2 T) M5 X1 M7 k8 \- T; k输出:' e1 T4 {, A# a ~
% r$ ?7 _ ~7 K" F' g[1, 2, 3, 4, 5, 6]+ M; Q3 z/ v3 L3 T2 s' k# Q
- r' Y9 b: A; ?
9 g$ z8 k1 o9 |% K' c1.3、添加字典! f w: \5 K9 F, s
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。* v2 |6 K: f, b- K
% C/ l1 K) r1 U/ ylist1 = [1, 2, 3]7 F, z' o5 P/ D' |
dict1 = {'key1': 1, 'key2': 2}/ @5 L0 B1 |. V# I# m
0 `5 F6 z0 N B0 _) e! I$ m+ jlist1.extend(dict1)( C- T* z. |0 @
print(list1)( A! E& Y+ n$ ?" n+ Z, R! X
, _# D6 s2 T6 ^$ M, u& \输出:0 g$ k7 X- e X5 i
& J0 ?( Y; E1 x
[1, 2, 3, 'key1', 'key2']
/ H* n; A: D \. J0 m2 }/ u, E; `0 d$ g4 `: s2 b, D0 B
2 I* B( Z# w) r" P% L# U2、原理解析
# C* {8 T6 G* I) ? V! q3 U" Gextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。2 a) I1 d: L& k5 F4 r( s% @
; D# y) o0 M( t7 w
) s1 x/ W6 T$ I1 d
& \/ j6 ?8 h! y8 `# T1 Z我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。; B2 K. _5 w$ C; {8 C/ y( ]
3 W* \1 q$ t1 F) ]; k8 clist1 = [1, 2, 3]# l: r+ {+ @! l ]$ _
list2 = [4, 5, 6]
% D3 X7 V. H( R: |7 P3 z' f9 T0 g9 Q
print(id(list1))
+ Y2 r$ Z" s2 H% V* l; hlist1.extend(list2)' s% G) A) |. u. b. h
print(id(list1))$ f8 C- U" K6 k+ T; R8 X
1 Z P Z$ q, s5 ~9 W' b" v输出:
( J# D$ x: i! _. Q. @- t1 v. M1 l, U1 ?) ^: J5 T6 c4 V" b: l9 @4 I
19305665089287 m* Z) @/ k6 V0 N; i) ?; y
1930566508928$ Q0 k# i& e/ m- G, _- T
1 S4 ^4 ?2 x3 h3 W; `+ \extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:* q7 p4 b7 Z6 K
) V# T4 Q6 @: K/ rlist1 = [1, 2, 3]
3 v: {. J+ X1 x; G$ n, Y Cstr1 = 'abc'8 E# N G( @6 y, r
) x1 w3 P+ \2 ?, k; q9 N, Clist2 = list(str1)7 N G0 ?- u. E
print(list2)
* g" N0 B( r8 x) L* w- plist1.extend(list2)
+ W1 f! v! M Lprint(list1)
8 e. G. k& y8 k# V/ a3 {4 o( v, Y! @- @. W' ^# l
输出:. d u* I8 m x7 p: ~) l$ w9 M
5 `. V8 F- f# l2 z: u8 y['a', 'b', 'c']
2 _1 r; t$ @/ w+ a[1, 2, 3, 'a', 'b', 'c']/ F% d5 V3 A. Q7 u9 T: s
. |6 z/ s3 Q: o* V- {$ d& ^( S: p
$ {7 [3 Z+ E9 h/ ~1 z
3、extend() 和 append()、+ 的区别?
; _4 r; w1 [: n% V; s J, v& C) _# `. r以添加列表为例
1 t" @ {& y7 ?3 j$ \$ V1 _/ u* h1 l$ ?6 E
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
9 ] K! K$ T* V! W; E6 S5 o5 t
6 F' {3 I/ z+ k2 ]. K3 j4 c. Plist1 = [1, 2, 3]
' g# n/ W: r8 f; m$ ^' Blist2 = [4, 5, 6]
* e: |/ e; Z# |/ K+ A
( T$ C: o/ q/ B$ c2 r9 Qlist1.extend(list2)! d3 T, F' T! U. z3 X1 S6 I; v
print(list1)& P, V5 b$ _ a
. o* G7 H; [. H% K
输出:
7 m9 w) j6 ?5 {6 j8 I0 o2 e0 ^: e- J3 _/ ~6 R+ \/ m! {8 c/ n# ^! t' i
[1, 2, 3, 4, 5, 6]* ~6 ?+ Q( ^5 ]. O& J4 E& ~
5 `7 [3 E1 B! V7 `' D
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
0 B% p0 v- o$ }3 u! }
0 X/ z+ q$ ?' olist1 = [1, 2, 3]
X" w! I8 S9 _) P* _/ G6 v9 Jlist2 = [4, 5, 6]
* B- l9 J# _- _7 `7 O9 C5 w {5 f1 M5 J& \, E
list1.append(list2)9 {* N8 h" Y4 N& i& q6 U
print(list1)
$ `1 z @ X" E- f! _; j! F* R2 K: o& o- o: j- K6 m
输出:* O+ W6 w6 }; b. ~% k/ [, x1 D' w
1 F. z0 v$ N* q v9 F0 t& U) H3 S[1, 2, 3, [4, 5, 6]]$ M$ p5 z' p+ ?( r/ j1 F
: h% ^% o; [2 U9 w+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变9 Q/ f" B! ^! v" `
$ b" F0 U6 r0 L1 Q' B3 w4 ?" Llist1 = [1, 2, 3]5 E4 g k( H# V# k5 N
list2 = [4, 5, 6]
+ X8 [+ S1 ~$ A
/ @3 P0 q. _5 T5 W& Vprint(id(list1))) d' c% j5 ]# ^0 R& |/ T2 H
print(id(list2))9 v: W7 a* E% d& [2 g6 A
print(id(list1 + list2))
) j4 l% @! C6 W0 @$ o% ^: w
) m t; s I1 n输出:
7 v# B1 e3 o# N* S8 u, G$ H) n/ U, p; Z9 W3 h
2680876376448
" A/ l/ j3 e! F0 l1 n2680876376576
3 _& z/ g6 X# e& f2680878544128
! v' q5 Q+ m1 r+ q0 Y* P5 B: H
) b! M$ ^* t: B, `9 J. \+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存: @9 Y5 \ I* v
% o* P0 O% N6 Q$ n. U/ Clist1 = [1, 2, 3]" K+ ~2 C3 C3 A e+ w3 P7 u
list2 = [4, 5, 6]
y8 D, B/ s& w/ o3 R: ~) X% Aprint(id(list1))
- a7 X4 V5 j% S9 f) e2 b- k5 Rlist1 += list2
2 E2 K( a# j4 D$ F5 e0 qprint(list1): w+ v8 T' P8 b4 R: f- I
print(id(list1))( A5 Z0 } M) H: a0 X
- S) X' a& X7 _$ j" h' F6 ?9 ]' Z
输出:
& Z) |3 `* o0 F5 c Y& X& D9 }3 m, R3 [0 _2 |1 l* A5 c
2150265921856
; n6 ~) F, p2 \) z- j[1, 2, 3, 4, 5, 6] U/ |' j% `0 m, X0 _" I
2150265921856
L- s' J9 s/ O R" v" N5 M! U' A7 o! M) u4 l
y; U/ ?5 ?1 {0 q i4、特殊的添加方式# L2 G. s: D7 A$ B* f
配合算术「运算符」添加列表
- S; T. o- b! V& R3 n9 o+ Y7 b8 U: O4 V$ O& W
list1 = [1, 2, 3]
" N/ w8 y9 m5 h; o9 flist2 = [4, 5, 6]
* S% [3 K' }* U E
3 _0 g/ b C8 q( Zlist1.extend(list2 * 2)6 A1 g* J5 t( {: m7 l' ?2 ^( b( ?
print(list1)9 M8 ^2 S$ k% f9 L
list1.extend(list1 + list2): b u N! H9 w2 a0 S v' X! f' J
print(list1)4 l; x- ~. \2 S' X; [8 B
6 Q0 y) T8 m& G3 x7 P4 D
输出:1 `2 d/ Y- X6 x+ t& T- l
; v( K) ]: C* y7 _& v5 g5 f% w9 t
[1, 2, 3, 4, 5, 6, 4, 5, 6], o$ S8 s; z; l4 p# T/ Z' i
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
; s, ?+ H: _3 y, g" i1
@- c1 G" o/ S3 r. T2
$ V" l: C5 _$ |5 ?9 H! U( q N1 q5 M「索引」取值添加列表
- G. T4 K F* i0 ?; H* d5 E7 Y" N' {: f) Q
list1 = [1, 2, 3]
& e7 K5 u! |+ Olist2 = [4, 5, 6]
8 L4 n. n, X$ V9 F" M" @" j8 w1 N, C7 w3 h& l- b
list1.extend(list2[1:2])$ t% O& W$ }1 d: i+ Q1 V( J0 G
print(list1); k- L, Z6 O3 f9 `# t4 R- q
- E M& [1 B. n( ?; Y4 H3 {5 y( m6 a
输出:
/ X& `9 w$ Q# N# _& U% H; E0 k ^9 D1 u0 ?
[1, 2, 3, 5]& I/ H0 B4 U* b- L; [/ T B
4 ?9 a& B0 ?0 R/ l a5 D5 B0 v2 S C2 K( [; B2 t7 T3 s
9 N. h2 u% ?- f
|
zan
|