- 在线时间
- 479 小时
- 最后登录
- 2026-5-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7813 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2931
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1173
- 主题
- 1188
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解2 \' R( s* Z! c8 f/ g
1、可以接收的参数
& t; u7 ~3 c C1 M1.1、添加字符串6 l, `7 e- U {
1.2、添加元组
N( M9 v0 }+ B; ^; T7 J8 J/ e1.3、添加字典
! P4 C( j) N. H9 {$ `7 W" T2、原理解析
* ]+ {" e, ~5 l) u2 Q3、extend() 和 append()、+ 的区别?
+ D7 y9 [! b! w/ I% H. j! H4、特殊的添加方式
" }5 d" {8 X1 p$ D& F. Textend() 可以在列表末尾「添加」另一个「序列」中的值。# b8 O' s7 S5 t
5 B/ J# W [. F/ u
语法
_* x% d8 U. Z/ u7 y+ h
! v$ \2 q2 W' S( F. P. u* ]- Mlist.extend( iterable ); W: x& t! I3 ~; g2 ]: w# {! X
: \2 c" M$ `; y+ ^6 L5 P参数
, u% h0 p. A7 B4 J% b. S" f4 ~. D3 x1 O0 ~# A$ ^
iterable :需要添加的元素列表
- i5 _. Z+ L5 W, a返回值
- A" k2 ?% y% W. k, N. D- b5 @
+ [2 t c9 i5 h/ C7 _没有返回值,只是修改原来的列表+ u$ a& y9 b" R: s3 S, l2 S9 Y
实例:向列表中添加另一个列表. u# p+ g( Z1 o5 c, B9 X
! ~5 C0 y+ D7 S5 L# o* hlist1 = [1, 2, 3]
0 ~$ u/ |, ]! T9 x! Slist2 = [4, 5, 6]
- q# W0 B) V l3 a M. f$ H. b% m6 w1 h7 {' A- F+ d. l. |
list1.extend(list2)
4 f- p8 g* n4 Vprint(list1)
* O) U3 r1 E% w$ i Y( V9 S0 x* M4 M" W6 F
输出:! q0 k, p/ Q% }, \, V# c
* K2 y9 T* k( q+ e
[1, 2, 3, 4, 5, 6]
* E5 P# U* p/ l. H- q- C3 u4 P. z' g# U
9 L. s6 Q7 \. D! E! q3 o6 P
1、可以接收的参数9 ~9 M, f1 M9 `
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。$ |( x4 c) |+ x" u& e, f2 R
" w% W* h% | |6 M
0 Z7 u. D6 O7 }! V; K, ~" E& c1.1、添加字符串6 b; G; q |/ u8 \% [- j
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。$ z2 K; f7 g2 i2 _' o0 c1 f
4 g( l. L: `# |) B% I" S+ L
list1 = [1, 2, 3]* J7 _/ r$ p- H0 k
str1 = 'abc'' s( y% d) d$ x
% a# {: K Y+ `) m
list1.extend(str1)
* Q8 e; L/ N0 u2 ]/ U. Jprint(list1)1 p$ g0 g- U1 f+ j7 Y
) A6 N) Z2 s3 W& N1 ~/ Y! p
输出:
/ J4 h" z9 O% O. n$ a9 D
$ i" u! K1 j0 C. W w+ h* ][1, 2, 3, 'a', 'b', 'c']" d h" [( y3 Z, i- M
* Z' F- Q6 w$ K% m: }8 b- h
. f6 j. j6 P: ] ^7 X$ A# V
1.2、添加元组& \9 C6 e1 ?/ ~8 W
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。& `1 G& ]- S/ d' b; i
/ ?2 P& |7 K# Q, W: _list1 = [1, 2, 3]$ M% M+ \9 u% |' X3 H6 D4 n9 c
tuple1 = (4, 5, 6)
" G( u; p$ c' w. K+ o# t' x6 N! g- m/ s5 Z7 J+ ^: M; P- |% z- y
list1.extend(tuple1)
: e4 z+ ^0 p7 O) u! w! [ q2 L; C5 Rprint(list1)' X! }1 r9 R: t
& V# U, A; H* M$ I! X K
输出:
" M1 b( F4 w1 j/ v4 w
, P$ i; h7 O9 t) m% C1 ?2 J[1, 2, 3, 4, 5, 6]
) w/ \" ?6 f9 k: J1 G9 N
x4 R, ]. r1 m* g
9 ^) {. P' |0 g6 j' t1.3、添加字典0 Q- y; l$ E5 `6 Y# A' |+ f: d0 f
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
6 Y5 k. f+ A I6 N. H5 f2 _. g9 I5 T
list1 = [1, 2, 3]" A# h; z6 T- L: ^. R
dict1 = {'key1': 1, 'key2': 2}* ?3 p' p4 V: u
1 ^3 E/ o3 e3 \% K5 dlist1.extend(dict1)
4 f$ J+ o5 }$ Y! ]& lprint(list1)
+ r- d3 w A6 g# `6 \$ z1 u
' O- Y8 C3 v# R! B0 _输出:
3 P; }- q& ]; r# O' b* D$ B# X9 w3 _& E _' n' u
[1, 2, 3, 'key1', 'key2']5 A4 l- e* g) d' ]
- x' w5 w6 u- w4 b' Q: U4 G1 p/ E* U
2、原理解析
- \2 h& a. } g2 f; F. Kextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
0 i5 ?2 a" X' O, y/ j
7 h- H) H$ T; W
7 h! F$ l! j( I% q( S* Z3 j3 ?1 Z+ A$ r" r0 O0 Z/ z
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。) }( K% {- v6 L/ `
' {# A) H. w/ [list1 = [1, 2, 3]8 W1 ~" z9 H) v5 A
list2 = [4, 5, 6]
5 v& T/ { V/ L' r6 X& A( m8 s
7 }) l! ~" { y" V, K6 dprint(id(list1)): f; a+ C5 @; n6 i5 n
list1.extend(list2)
$ \6 Q9 V1 X! L, f3 m* Jprint(id(list1))$ L! A; P1 `( \1 c3 ~
% A1 h2 |/ S" h" a, L* w输出:
5 L( ~, J) H2 e$ E7 r; }4 U# ~; K4 Y4 Y' c
1930566508928
. ^0 ~; o( W0 b2 j8 U' m# Z1930566508928- S2 N+ R/ d5 E+ g4 {' o
- p! e3 ? @3 c( ~1 A! P' z' {/ |
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
) N; Q Z4 ?$ x1 C* n, X: N" Y3 H2 p; y$ @7 V" K8 K
list1 = [1, 2, 3]
- Z3 z' U) g* P5 t% }# C! [str1 = 'abc'
! m1 q. {3 ?+ f$ P$ V* G5 A* E3 l* F
list2 = list(str1) e& p2 d: C0 K. J7 k5 W6 G
print(list2)+ f+ ]) L# L3 `: Y/ N7 @3 C
list1.extend(list2)( ^1 {4 q, h. F
print(list1)
/ b0 |% P9 j% }
% t" d1 }% r( P' x* M$ {! ]输出:6 P8 P2 `$ L' O+ Y) w
! j) P4 l- N( ^. A
['a', 'b', 'c']: K, Y) J1 i6 I) [7 z
[1, 2, 3, 'a', 'b', 'c']7 E/ r5 E) b& S5 o. ]$ h- r
2 [$ D" G$ q8 e/ ~9 N6 b
/ u1 ]+ S" b, r+ ~3、extend() 和 append()、+ 的区别?! [8 H- J3 T4 p+ h0 s
以添加列表为例% V) Y7 U+ G' M" Q6 H9 F- `7 [
+ O; j, ]7 v& K
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
5 P- F6 b" e# H% o% h, T2 S. q/ y5 @8 N7 l) }- R; \
list1 = [1, 2, 3]
- l' X: x4 G' v* I2 G5 S: dlist2 = [4, 5, 6]0 b! Q& _- W" t* P0 o4 x, s
3 E J0 ?* s7 Jlist1.extend(list2)3 w4 g. @* w* k( y
print(list1)
' R( R/ A* i4 w
; c2 [$ g; e' W7 e/ o输出:
* H' u2 J! e8 C- X# C
0 b$ U- ~0 k4 c+ i4 j[1, 2, 3, 4, 5, 6]
! d4 r% x$ w; }2 n6 ?4 E# x# z. ?6 \
, o* A0 j; N+ ]5 p3 {9 _' O. H. [" Cappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中7 P c5 ]$ v4 d+ |: K
% s& g+ e* h0 @" U5 v; alist1 = [1, 2, 3]
/ B2 d$ U8 b& e1 a+ a# Y+ j( Elist2 = [4, 5, 6]
5 f: x6 B, l6 s1 F: j5 g' X+ x' h: V, n" r0 i$ e) I- S2 i
list1.append(list2)( l. N" l8 w5 a: V9 R0 b5 o
print(list1)+ l. E" v% R5 |% V
# S" G( E% N5 s4 O8 p: b输出:
1 p! Y2 c! B9 H, T' C+ K U0 K
[1, 2, 3, [4, 5, 6]]
( r) M5 F: Q& Q; I* ~
N: @9 Z; T+ ~ H p+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变( }, \; x% f% c( c2 \; |
+ X1 O, z6 j0 W6 U( T* z' W# q/ J5 g* clist1 = [1, 2, 3]
4 q& _+ u. P: q8 Xlist2 = [4, 5, 6]
( ~6 Y1 b( c& @4 S! a
- k/ D3 f" ]! h6 f+ q" Mprint(id(list1))' P8 P+ }6 U, t
print(id(list2))
" ~* u+ ^* [" e/ O- bprint(id(list1 + list2))
; n7 g0 D+ @3 i' ?! Q- D2 ?; |! n' G. a7 }
输出:
1 g, p# v- K7 ~ a- w( ]" i
* u" k% ?6 K% P j4 ]' Z {- f2680876376448- O. M& u6 ~ D2 Q: B0 Y; x
2680876376576
9 r. q& E/ E* J/ M* f3 Q8 J26808785441286 W) L0 e# b8 s4 g7 U! A5 p& F6 a
2 T& i4 q" ^$ h4 L: x+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存/ d/ V0 y r1 c; ?% Z( e( N+ c
& h" Q8 X# a6 i1 T! |0 j3 w
list1 = [1, 2, 3]
+ Y* p/ F% c- olist2 = [4, 5, 6]
/ T% {7 _% m+ ?# }8 f9 n" D% _0 a6 y1 Nprint(id(list1))
/ B- n% T' b) t. l" B$ ~% M7 ilist1 += list2" h+ r$ [' l2 J- k- v" ]
print(list1)7 \5 h- b) U9 R' l/ h7 I# I, E
print(id(list1)). `% r! W& A O- Z) P X/ F
% l5 d6 }# N8 _$ N7 T
输出:
: j# c. d( c4 f# g2 [
9 L; q: E$ {, u- |2150265921856
5 p* ~& x! ~& T" Z2 v6 x[1, 2, 3, 4, 5, 6]4 k- R u3 G9 m, w: f
2150265921856
. J$ h& V6 d4 |3 p1 Z2 f8 B4 k* M" ]) m5 o7 `0 j
* F1 s6 Q* }9 L; u j s4、特殊的添加方式
! y' R6 u1 }* `" P6 V配合算术「运算符」添加列表3 {- t' B- R) @( H- ^
$ t8 H9 q e8 ^& E. A0 {8 }- Tlist1 = [1, 2, 3]' a$ F5 |1 c: Y) P! K
list2 = [4, 5, 6]' I; m3 N* }' o) r2 [
( J: C# @7 R( t' S" P2 f) [1 D9 [5 r
list1.extend(list2 * 2)
4 f: I" J- o; o) Bprint(list1)9 X* I1 j& w) X8 S/ t# ?5 M- p( F$ f
list1.extend(list1 + list2)
8 m6 u. W+ K( P& a; p/ Eprint(list1)2 E; N u" H6 F( t0 l2 x
& u) T6 Z* p8 H0 d2 ], |输出:, @8 t6 |" f% s" h$ W
. y* x* X6 B! d3 T8 X0 @: Q4 Z* I% @[1, 2, 3, 4, 5, 6, 4, 5, 6]
9 f* n# P' L/ T% }) H, z[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]9 A" a7 L* ]5 [3 C6 x) @
1% {. I/ I6 Q. k7 b7 _8 T. T/ G* R! Q
2
$ U4 J/ h+ G: e. V J; W$ I「索引」取值添加列表, i7 V& ]+ z$ l5 z
6 P5 s8 d5 r& e9 Ylist1 = [1, 2, 3]* G% ^5 I! Y I/ S( Y! o$ s& O
list2 = [4, 5, 6]! b! W# h. C- V3 D3 q' n. m
# T/ G. X( \, Ylist1.extend(list2[1:2])
& l( V' y9 p' Z/ ]# Mprint(list1)
% r/ P2 _1 R+ e( |
/ ]+ `" A& t7 G6 f输出:
3 o1 G' H2 ]8 W* U! O1 u
) o$ Y4 Z" o* }[1, 2, 3, 5]5 m1 l/ X; } Q: P# \
# D; i5 D: Q i' J a. a
- Q% g5 t4 y8 I" ^' P
- K8 l1 @( E% c
|
zan
|