- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解
$ ]% A0 C# y2 k' {1、可以接收的参数
4 w9 T! x% J0 ]4 A& R% Q( \1.1、添加字符串
. c [- h( R/ b+ K! K1.2、添加元组
* f' Y: h6 O7 ?1.3、添加字典
2 `5 I% ~6 T* t2、原理解析4 M C% ~* G7 f& D9 P
3、extend() 和 append()、+ 的区别?
$ p) m9 [, \# p( } R% H, t$ e+ k4、特殊的添加方式
! R% d ~8 i7 B3 qextend() 可以在列表末尾「添加」另一个「序列」中的值。; O# X' `. l! p- R# K5 G* G# Q
O6 I; N4 i. s% K/ ^ r语法
( L, Z0 H$ [8 Z
9 f2 U8 y, d) w$ J8 y' m8 Zlist.extend( iterable )/ z- T0 K t$ b: Q, Y
! n2 Y7 ]/ x! k- T9 p, _
参数- z. z }9 U& o' |9 h( T
1 u- `, P9 W _iterable :需要添加的元素列表
' R8 A6 F7 s$ l5 c返回值8 k/ `: Q" v# p9 Z
4 b F, W: ^; s- N) p3 a
没有返回值,只是修改原来的列表
) d" `7 I; }2 g% C实例:向列表中添加另一个列表- H' J. [' H9 t1 o$ L
0 T) R/ o o2 f4 U, S
list1 = [1, 2, 3]$ f9 V a* H9 i7 Q: p$ K
list2 = [4, 5, 6]
5 Q6 X' d) }2 @# n! s+ L% z! c4 h
9 j8 k( R2 l: qlist1.extend(list2)3 \7 ^3 Q$ ] E& O
print(list1)
) ]! ^! ~+ o# J, r3 i- U; _. {1 O+ I, t
输出:
/ a9 Q. K2 I0 o* q/ O# c. G# y2 H6 o5 ]" H6 a
[1, 2, 3, 4, 5, 6]9 Z( J7 }8 X4 W4 m. K
; @% T0 _& m }& g/ W0 Z) Y L) K, @% d& p$ h8 g
1、可以接收的参数
& }$ x* B3 `: {9 r8 U: c2 Iextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
/ t+ f5 I7 u: q/ n) A9 W. }7 g& n! k0 p% I6 `
8 F( ^) X9 h: _' S6 l' A6 l; B
1.1、添加字符串
6 \5 c; h* I6 G3 \3 c1 ?extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
# z3 o6 @( t2 v9 F& V* _0 S3 c: d4 o( q2 k, R5 X3 k
list1 = [1, 2, 3] E6 i+ F) j" ?' l* W
str1 = 'abc') W) r/ z1 y9 p4 Q6 F: Y
+ N! {" h% x1 K- s6 p- s4 Zlist1.extend(str1)4 |7 s7 J: P( X% m2 B9 [% y
print(list1)
' S7 u, M5 y! y& n; p, |
4 k4 Y1 p+ `& f# d& ^* x- o2 P输出:2 @3 s' A" z8 @# P
% }# v* H% Q" a[1, 2, 3, 'a', 'b', 'c']5 f7 L8 Y- E+ K
& s ~- e1 x4 ^8 i4 c& B; q6 q5 g
6 l+ c2 Y2 C, E! i* d4 W! }" g1.2、添加元组
, o$ Z0 Z4 H1 N4 a- y* `/ W/ X9 P' gextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。- m" }! b+ u) d; `" h) f
; d' n& R( X% Z$ ] R
list1 = [1, 2, 3]
, _" M8 f: j# W! W) @tuple1 = (4, 5, 6)0 R$ O9 y7 l* Y2 n& w
}4 @7 e/ s" I {
list1.extend(tuple1)1 @2 P* h+ h4 I
print(list1)9 q) t0 L6 @- Z" B/ Y
+ o |1 t! L, V7 I$ X6 R$ }: X输出:
" v2 _% B( V9 G/ |) F* @! {& y" c. v9 \1 D3 f
[1, 2, 3, 4, 5, 6]% B0 Z+ F/ n }" g; ~7 b
, _' G N5 ^( \' r, y D
" Q# ?' o& f& e# L- F/ A5 J1.3、添加字典
& q4 R7 V, n% Qextend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。" g% X' c2 I9 j% c4 w* g
+ k. M* \2 K u# A3 q
list1 = [1, 2, 3]. T2 Z; X: b; G
dict1 = {'key1': 1, 'key2': 2}
% b3 {& D: y6 G3 s/ T
( O9 ^5 S) }, f, i+ @$ Hlist1.extend(dict1)7 B, r3 b& P; a$ h/ A0 N
print(list1)
* U+ l+ ?, ~ e/ O6 j+ ?! N7 L' \
输出:" @% _5 S2 l5 @3 i& S/ A
% S4 w0 y" F" e! F
[1, 2, 3, 'key1', 'key2']$ B3 U b! I: ~$ e( O6 z0 X
* i4 @9 k: m) G" m) P7 }
, h0 ?) q0 `$ ?( P& k2、原理解析" x2 J! [. J+ n' J
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
9 i/ p0 X( c& `6 F* x% Z* y- r8 O5 H3 `
+ ?' P$ V& b- @$ i- B+ ]: Q9 o
! `* Q% W7 T6 V1 N6 _0 Y3 L- U0 X我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。: Q3 i9 E* z3 k
1 y$ I+ X+ \1 ?, ^" blist1 = [1, 2, 3]; ~$ z# k& D) i7 t7 i
list2 = [4, 5, 6]
) r5 B! K' i' k+ ?5 c+ F& x5 K' V4 _# s5 ?" K7 A# r
print(id(list1)), K; G% B* {& b; y" L& H
list1.extend(list2)* t5 J2 J2 Q3 L
print(id(list1)); B- d+ u }7 T& y; f
* q* X, \% f: o; F' a! Z) H: b
输出:4 c" ?9 A2 \4 v) B
7 b, n' O! W, U n( g
1930566508928
" i) `+ N D* t3 {, {1930566508928
7 i, a( w5 e4 }+ b: Z8 j$ \8 t
' L( J. F- ^) v+ ^( r% Eextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:: E9 |" t7 M3 W7 H: S: _, e
) {' L$ U$ ^' a, xlist1 = [1, 2, 3]
. B3 o* f/ c Y# [! Qstr1 = 'abc'
. H7 M9 R+ P5 f+ s% ]2 r2 A0 L( O
list2 = list(str1)# h3 I3 J+ @1 c$ o( S* i
print(list2)2 l* y* N, G4 H: i7 U6 `! n
list1.extend(list2)' Z0 p: Q6 [+ `" h/ c. b
print(list1)
; q, R+ J$ C4 @& [& }1 E% Y% `! L" g* o) L+ J
输出:
! t) U2 w c/ p0 M1 c {5 r2 U& J3 s
['a', 'b', 'c']
' q$ ^0 `- b) e! j, N[1, 2, 3, 'a', 'b', 'c']
9 Z+ a" N3 [: e4 W$ v+ N% y4 X4 u/ j" X y
! a0 {! |: c# t' x: L
3、extend() 和 append()、+ 的区别?; n: M, a& L* R9 k) S2 s1 q
以添加列表为例: U: l* G& @* l7 V G
/ m+ D' v* u' m4 H1 D% \2 I$ Wextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
2 E+ v2 E* z" |! X4 W0 u2 R# @$ h9 K7 w1 J$ y7 A
list1 = [1, 2, 3]/ U1 \3 w* k. J" y; |" J$ p( ~
list2 = [4, 5, 6]; }, q, M4 y: J6 g1 |+ L. F1 L' A
+ `. g: J( l }, l. u( s$ i- P1 ?
list1.extend(list2)
$ c3 G2 f! e' u, aprint(list1)7 Y. t' B$ u% o% R$ F
) T' T6 m( w n& I) v输出:* j8 ^9 I% g {
/ I' f% ]6 Q6 O. i: w9 Q- B
[1, 2, 3, 4, 5, 6]& {* |" ?. R* i* E
) H. x% W& g) ^5 @
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
5 V# v! Z1 q/ X- u* F7 w8 x& S% \
' A; A# p& e/ plist1 = [1, 2, 3]- m- O3 t) _, F: m
list2 = [4, 5, 6]
# s$ N5 ?. k4 l5 }5 A2 p' @2 t! g7 J
list1.append(list2)
! ?4 k( F% P8 _print(list1)
/ p: {# {5 Z/ {$ x E8 E, A- ?) p. l$ u N. T& f; O
输出:: ^# l) M5 l2 Z5 F$ y( c
U4 p& ?7 K2 n$ u( J+ \" _
[1, 2, 3, [4, 5, 6]]
. `5 W1 l! P, L5 H0 f! r3 ?. x0 ?$ e
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
) k+ z* \! d; B \2 @. z3 ?( t: A$ i: i& @( I0 X3 u1 U7 a- }
list1 = [1, 2, 3]
, S! T0 T5 g# Z) Dlist2 = [4, 5, 6]3 ^2 T& |$ }/ Q* g4 T( a
6 P$ H$ t F8 v8 v, j3 F j" |5 Vprint(id(list1))& G/ Y- c/ K' W; \
print(id(list2))2 Z9 a0 B7 a7 R5 K5 U
print(id(list1 + list2))/ ~" M. X' ?) e0 {
* N7 y# M7 ]4 c8 R z* Y输出:
* M$ W& W \2 p3 s) O* P
5 Z: w4 [# H+ {. u' i. Q) c2680876376448
" h7 h$ c7 M" M( G( F1 R7 ?2680876376576- k* U0 d( k9 H
2680878544128. e) |2 H" c* r9 P% m% i
' i" }1 b* g( k- z! m/ x9 i. I+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
4 t- @( |2 j4 z9 c; M
' Q2 ~& d: C% e Blist1 = [1, 2, 3]
# Q$ c7 x5 R* e/ G, d. A: w4 hlist2 = [4, 5, 6]
- z* ]' O, a$ yprint(id(list1))
4 f \' X w& h( C4 s2 |list1 += list20 H# Z# {& S8 {
print(list1)
9 F' L. c: F; G. F0 Oprint(id(list1))
& Z- }) }# c; M' X t; W8 Y0 E" S. V' z5 q/ H! M
输出:
2 g6 J7 S' L6 R3 o- j$ z6 j
7 g+ b4 u0 Q- O, i5 y9 \7 L21502659218562 B% i3 T; _! M0 w5 l- \& m1 g
[1, 2, 3, 4, 5, 6]
% H; G2 i8 A% n0 e2 y2150265921856
- z6 b, E) i5 J# J( A# e. t' n6 C! E/ g3 ?$ `3 Z; y
2 l) y; x- g9 i) f1 S# k
4、特殊的添加方式" Q' ~4 V8 P- Z& Y
配合算术「运算符」添加列表1 B' D$ n* a- Z( O
) D' A. j- s; Q- F. p. O3 D) r4 flist1 = [1, 2, 3]0 f5 y$ I# i3 k ^' A
list2 = [4, 5, 6]
: g9 W5 N5 J: K: k% A$ r9 Y. P8 T7 K( }
list1.extend(list2 * 2)* }( U. ^, h) p; \ Z
print(list1); \* \ D' r7 v) @6 b3 w( b6 ?; W3 _
list1.extend(list1 + list2)
4 U" W4 C/ \) E7 N( jprint(list1)0 F. r6 ]) |8 {& G1 ?
- L& p5 Y* U8 r, q8 V5 M5 M输出:% y- G" q. s0 j, N7 b
- B: Q1 C2 U1 ^* g3 v( e
[1, 2, 3, 4, 5, 6, 4, 5, 6]
4 ?6 A. t) q1 ?[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]4 N/ y- w- B; E" ?5 u/ \
10 o3 O" F0 \; J' J1 F k
21 |- x5 P# Q% [1 m
「索引」取值添加列表
' ~6 e( j) k/ u0 j8 |. E( v
5 S0 c/ r* m* J g- L" P; Hlist1 = [1, 2, 3]
$ ` y0 |# \( I9 ^$ z p3 Z- Clist2 = [4, 5, 6]
; h* l) s% p1 S N) ?7 [& d: {& \, i6 Y& y' e
list1.extend(list2[1:2])
/ S4 R) z3 O7 o4 Y/ B# ~' mprint(list1)' H; F% O$ p7 o# U' Q( D
4 M. x) a: w$ V2 j1 {" v输出:( y: G$ O* ?% H. N }) C
+ {6 C4 W+ C# |[1, 2, 3, 5]
6 J6 g @5 j5 Z5 m' Y |
$ }9 A! D1 Y! x I) v9 C: F9 x9 ?
) z+ W5 f$ L+ N1 s" Y
- O X/ U% e4 |$ }, X' u' { |
zan
|