- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解( g, f- S3 t: y- D0 L3 X) r. s2 d
1、可以接收的参数
0 c0 O$ |% L; i# Y; L1.1、添加字符串0 e6 l) o" ?' e8 M3 u
1.2、添加元组7 c2 }) M/ \/ }0 p" C8 c
1.3、添加字典
9 e5 v1 ]7 W7 Y/ J2、原理解析9 ^: q/ M: f: D1 H
3、extend() 和 append()、+ 的区别?# ^2 ]0 O- l9 J- O# Q2 i
4、特殊的添加方式" P+ Z3 K0 z; a% x2 T! {4 Z* R
extend() 可以在列表末尾「添加」另一个「序列」中的值。
- M9 d/ F0 x- v+ m' A i% c0 }5 X/ M% h, ~2 m) q
语法! x, N5 M# R8 A: u& l
6 H' P3 ?* X8 |list.extend( iterable )
$ Z% o7 r' L; x6 s* I' F9 \7 ?/ U
" ]5 }8 q, A5 @& Y- e# z7 y参数
9 c1 L! @. q/ z6 |* ~* a9 S/ O* z2 t9 ^$ G$ a1 I3 g. P
iterable :需要添加的元素列表 c, b3 Q5 b! g2 u9 `% g
返回值! i& r' N& ?- z" ]7 f
: j4 i& }) }) N5 m' x8 `- B没有返回值,只是修改原来的列表1 I( k- U; X' w; L- a
实例:向列表中添加另一个列表
2 h; U# [1 I- `4 _+ F/ s$ m/ y2 }" D q3 {$ W* G
list1 = [1, 2, 3]! {/ n: l, \% i/ {5 Q2 ~* q
list2 = [4, 5, 6]6 C% t3 q2 O( I( @* h2 n
7 w, M4 o7 y* Q/ s: g( xlist1.extend(list2)
1 ^) ~" f2 R: M- V5 g1 kprint(list1)
9 F7 u% @$ C% X
9 ]$ v# C+ J$ o; ?2 S输出:
3 v0 y( `; a0 p1 W$ @) p5 u" }
[1, 2, 3, 4, 5, 6]' P7 u" F' {* F6 \% d+ v+ |) `
; g8 v* c. [3 @
; T- J. u) w: B$ \; _
1、可以接收的参数9 x# Y3 B( G9 r( \# G3 X
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
$ A6 c( @- ?; k6 ]* D4 N! C; B2 s7 q S) x' ^3 Q
S9 J7 a3 x( o/ {; V- `5 ?7 ~
1.1、添加字符串# q' \9 ]; e; N- f1 Q) K
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。7 G: }. Q- D9 I8 G: X! n- O: V P
; w, {7 p h8 Q
list1 = [1, 2, 3]
2 k" `5 n( K; W/ p Q8 k$ ?4 f0 Kstr1 = 'abc'
; n( y* C" ?. k( S: g! q
2 ~' p+ h+ d' L% ?' H/ t# @/ P7 Glist1.extend(str1)4 d) M$ f: Q. M g9 m7 `; U) q% \
print(list1)2 U9 R; a. W7 y0 P# }: o
. `0 s. ^4 Y1 D3 }9 {. ^ y' a输出:
7 ^" s) w$ w7 [) G$ w0 ^, H8 i2 O
0 z* p& [* |4 |/ u- f$ O[1, 2, 3, 'a', 'b', 'c']
6 ]0 ?- T& f/ Y7 i% m& ^& ]% E( A! b" [
- p; e% Z$ d X& @+ G1.2、添加元组
* k) x4 ~0 F. O0 hextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
6 |& T0 V4 h9 z I7 h# D' d F
* a5 E( p- h; @list1 = [1, 2, 3]- m, Z \3 D, |
tuple1 = (4, 5, 6)8 e! q3 h- w* t0 X' _
n/ C+ F: f! h6 b
list1.extend(tuple1)3 b5 T2 j) D- y/ K
print(list1)
4 g6 I# g( K: q. B# _
; }6 w/ F+ {. f k, [7 [1 ?输出:9 @% u9 o4 i# t4 L$ Q6 Y% Z
+ [8 C$ B: u# z) v2 n
[1, 2, 3, 4, 5, 6]8 s" v% D' D1 Q) C4 m
5 v& G- V. H: n0 y: k; l# Y' M1 z. A+ z1 K0 N. p( L
1.3、添加字典
7 V! S% O5 l$ {3 {extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。* O: Q$ R$ I4 J
% M+ u/ Q( B) a
list1 = [1, 2, 3]/ |2 T' l8 Z7 I, l
dict1 = {'key1': 1, 'key2': 2}( R; }+ m# _5 c; W2 ?+ Y R
+ _! A. y4 X" Ulist1.extend(dict1)3 H9 o0 U- c4 I1 f0 `
print(list1)
% r) [0 m8 o+ S) o, ]. [3 X' Q$ r1 m
4 q- Q3 e# m; a/ D1 _6 b; ~* A输出:6 T. V1 _6 m1 t+ r% o T
i8 j! M/ ~. v) x, ]5 _6 ?[1, 2, 3, 'key1', 'key2']
* \' K% E& b% i) S) J7 \* k& w: N" W) T
~; R5 ^9 h+ L$ I* y! E% s2 H1 I
2、原理解析
5 p2 H ?& R8 u& F4 c) l. Q- ?extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。4 @$ A. k/ J0 Y" E
0 ?3 C; _1 A; ?% O# }, P0 C
8 `% C# p: H' ^9 t# f
1 O0 T2 R% J; H; m8 E5 O我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。! r/ Y. [4 G( w+ q! Y9 e" s
6 i; n V( b2 z0 d- e) K' m. v
list1 = [1, 2, 3]1 \+ E- H6 ~$ z' g* ~% m! E
list2 = [4, 5, 6]
6 W l9 Y$ q) \2 A$ H$ t: R4 ~ T. N0 @5 T
print(id(list1))
) s) N* s1 Z7 }% `0 `& Flist1.extend(list2)8 |( \1 H8 G& ?: t) D
print(id(list1))7 C1 e! U- g1 `" q: G& J3 p+ t3 g
& a2 T. R) v( j- |
输出:+ C/ ~0 I4 N5 u& }
3 G7 _; B5 q- v- \: g: q$ ]
1930566508928' h) r( R8 H+ g: d# g4 O. C" m
1930566508928
S) l) W( s# x1 B3 v
7 `6 Z. v1 w+ v, k- eextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:4 M' X" q$ z, ^. g6 u/ P/ f7 R
" }$ ^& V- J# W C
list1 = [1, 2, 3]
/ }6 W* v6 e. \str1 = 'abc'
5 s( ~3 n1 w+ [
& y2 h2 c. C- n; slist2 = list(str1)
# K% r2 p4 J1 q$ e( N. U# Nprint(list2)
6 W4 X$ T' |' j: x/ c$ ~list1.extend(list2)
' ^3 y; {& t3 k/ Sprint(list1)+ p* }) e# z8 @/ k# j
6 }7 _- }* D1 v5 P U8 \8 b输出:3 d6 K& v/ C, m0 K2 N& i
M) F. h1 J8 p6 @0 l['a', 'b', 'c']
7 P2 B/ V- S- z5 z: | W2 @[1, 2, 3, 'a', 'b', 'c']) z* R; F' z' ~, c
( z4 R& g3 ?- k1 K7 [. p$ `' r8 E% Z1 c' ^4 X; \8 `, Y" ]
3、extend() 和 append()、+ 的区别?0 f1 k7 J' E( O0 S# t. p* R" w- ?
以添加列表为例
7 J5 p% w, H/ T
1 u. M6 Q( L L" T( vextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中1 R0 v- Y0 I# m! C
. i. M3 Q# i$ r/ e1 n- I
list1 = [1, 2, 3]
7 x( E- g4 F1 H' C0 K$ @" f' Llist2 = [4, 5, 6]: q% m# u J+ n, U7 I1 d
: y( N% i$ g5 i' f4 i
list1.extend(list2)
" C; q$ r4 E9 W$ f" t* K, V+ ^- X# tprint(list1) N$ M! f) ?2 _+ J$ X
9 V) \: Q2 c2 z5 ]9 B. l" c1 ]4 I
输出:
2 P0 l/ P* V/ H; w6 Y6 d# \! [2 r
' Y! U: M9 o( [3 o8 \$ y) D( P- a[1, 2, 3, 4, 5, 6]+ R2 ~7 [7 ]5 \9 y J
5 `+ t2 h, D. N- Xappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
' o- t! Z. A% R8 R; l e& w: M
( j+ i$ `; N+ a2 Ulist1 = [1, 2, 3]
# V: z2 U7 K; vlist2 = [4, 5, 6]
* s$ G9 X: ]9 u/ n6 y2 t
6 y0 r/ o1 m( Rlist1.append(list2)
. }4 \2 U+ w2 ~) sprint(list1)$ {2 b" j- E; L j5 V
* U, C4 B" `4 l
输出:1 A- U) T% T; `: ~1 W
& Z7 F ?3 j9 r6 s* y; c, ][1, 2, 3, [4, 5, 6]]
, z+ |* p. R, X0 o! K7 v/ T, {4 e2 ?' A- i
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变7 K/ m; o3 H+ G: d. w1 D7 U5 ?
6 I) I0 m6 x7 D% v1 x
list1 = [1, 2, 3]
5 ^3 l; {( F5 E$ r$ A7 xlist2 = [4, 5, 6]
8 H4 {1 m" p( I$ K' x, J* @8 ]- F5 d% n" d
print(id(list1))" S7 A+ d: X ]( g! g/ Z
print(id(list2))
, ?1 c# K' d, n) J9 L ?$ }print(id(list1 + list2))
( y7 O2 x% Y6 j4 y
, l1 |& T( T% L( B3 q2 a* M输出:
% y# y& R9 d; A! E
r. ~6 f7 I( s6 c* f2680876376448' A! [! }9 d, C/ m1 z- u
2680876376576: d& P$ W% q; [( h1 q
2680878544128
- M( S* x1 b, I0 N" I9 ^( C% g* G: [& s
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
% g1 ~# v7 B; S: B) e4 d. I) V3 N; L5 M/ D8 D! |0 A- i/ e
list1 = [1, 2, 3]" z1 C5 c# O {8 t& k. _- V
list2 = [4, 5, 6]& g0 q# n# [" \; D% E
print(id(list1))" X% y- z; F1 t1 v2 B
list1 += list25 g$ K- ^6 Z$ m7 _1 P" K
print(list1)
* K, h. Y; n# g5 vprint(id(list1))! H2 @+ i- ^4 K/ B
3 N$ ^+ Y1 @: t- j输出:1 r) d/ _& i/ M* e- i
: Z0 V# R. ?4 Q2150265921856
/ y: m. B: ]! p5 L[1, 2, 3, 4, 5, 6]
1 D5 l+ k- I7 d0 j+ j2150265921856- k: @# ?% v2 K5 J3 O
z. Z P8 q+ i5 b w
6 J3 s4 H# F5 x1 @
4、特殊的添加方式1 S, g/ E; r4 O2 N4 Y
配合算术「运算符」添加列表
. p3 Y- B* o7 U2 A. G! R
: D- b) V* B6 c% a) o: n. `* ^, E- g: Hlist1 = [1, 2, 3]& m, x% ~4 ~5 ~! K
list2 = [4, 5, 6]
8 x: r* i5 j- Q4 s1 g7 i0 [2 H) x+ b9 A. M: b* |. l
list1.extend(list2 * 2); w. Q/ w5 x: z
print(list1): l0 O0 k6 R s. B- m- O( x( s
list1.extend(list1 + list2)6 o3 `- M0 a; s& e, B
print(list1)% J$ {2 G7 @; Z% m
7 x. W2 P( O5 k1 j
输出:
/ l/ ~5 v0 h* z! N
! I; o8 k+ ~4 w: M5 u8 p[1, 2, 3, 4, 5, 6, 4, 5, 6]- s# F- n' x1 L1 \& l0 F7 U
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
$ V/ Z9 v! U& t4 [: u6 T) u1
! ]. r$ C3 F, b7 ^4 r* e9 V2
% z! o2 T" g* z" C「索引」取值添加列表* n7 ~5 j+ n7 l/ X, N" s) {+ s
4 a, F5 d1 J' d
list1 = [1, 2, 3]+ B0 |7 N" p/ e( m5 r
list2 = [4, 5, 6]
5 ^8 I' t; q+ k! ~9 P/ K* p1 [& V) w5 @% M+ ~. q. M
list1.extend(list2[1:2])
: V9 E* ?/ u7 L# |* J, ~print(list1)% t& h9 \) E8 A' T. n
2 R8 ?* X1 Z( S: t2 }9 y8 i/ z
输出:% }9 M# ~+ _: f" I
: h9 @+ _4 ]1 v% q% t7 i[1, 2, 3, 5]; w3 s. H4 D: f
' @; i% c6 ]. L0 @ K
6 J% C: o% r% j( z" n# Z# J) V
n' m9 x$ d S: l7 Y |
zan
|