QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2735|回复: 0
打印 上一主题 下一主题

Python 列表 extend()函数使用详解

[复制链接]
字体大小: 正常 放大

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解9 t# z/ v4 W& f. M- O2 }. X" ^2 n; ]
1、可以接收的参数
5 |( D4 T, v5 r& A* a' R% N1.1、添加字符串
  q6 V' l5 Y6 O1.2、添加元组
/ d. Q4 m3 s" n, Q0 v& q( k1.3、添加字典  a1 C% \" o* n( z
2、原理解析/ v$ T" _" j% C$ N- g
3、extend() 和 append()、+ 的区别?4 a' X% ~, ~5 p3 o6 r3 {8 ]
4、特殊的添加方式
9 x0 g/ q# ], F% }9 M  Vextend() 可以在列表末尾「添加」另一个「序列」中的值。
3 P7 {% N% h  X1 N; t5 w: x# B/ g* K1 t* n! e- a
语法
4 c: A# h# t) W& c: m, R6 A: ]; N/ ^# |/ L. h
list.extend( iterable )3 a' F8 t4 M- e/ f) {; K3 A

/ I9 C# i9 K7 J- k  u  g. U参数
2 P$ k, F6 D0 m4 N
6 P0 d, v5 ~' Q2 ?iterable :需要添加的元素列表- \: W4 V- Y$ X4 s6 F% J% m
返回值4 H9 }, h8 o7 ?" V% x( \. r
$ y& M  Z6 K% v" V9 _0 f' j
没有返回值,只是修改原来的列表' g. M7 B5 Y  E3 h4 J
实例:向列表中添加另一个列表1 M+ n( c8 Z+ C+ u4 P* t

& X* G$ g7 m; n7 j* Vlist1 = [1, 2, 3]
  C0 ^! i$ a7 i, @+ ~/ @( Vlist2 = [4, 5, 6]# X1 ^+ ]5 t9 |3 f  w+ O/ u* d

% L$ j% \8 `' g  b: @$ R6 M& Clist1.extend(list2)6 \& S& P# j7 s
print(list1)
' T( m: b9 \" I+ w1 V, Y/ `  n! Z2 e  ?; `$ Y
输出:8 X' b) x+ e8 {8 _7 m" k

/ b6 F) J# I' g[1, 2, 3, 4, 5, 6]$ y: Q" I8 ~( y- v' u8 V

  k5 Z: J7 ?' a5 `# ~" R3 j; c- Q2 c; N% E9 |' J7 i' c
1、可以接收的参数
/ Z0 C( v3 G5 Z' x' i( {$ P9 ^7 W. Fextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。' a' L7 Q2 w* a& K: s8 G1 I/ B

6 S- j1 B) g# N' ?/ A, T, l. d4 C
+ g- e4 o+ @$ R, T- i/ R1.1、添加字符串
3 |1 h. I3 \! C# Zextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。1 D8 U/ Y( \5 B
- q- d, Y; W8 c. ?& t* X
list1 = [1, 2, 3]
) Z' v5 a" ~0 o7 ?4 N0 Nstr1 = 'abc'
$ C' d, k$ l* ^- Y) V& ^' w; c7 _0 U9 I
list1.extend(str1)1 m$ l: q' @1 E* _6 {
print(list1)# f" ?* d$ w8 E
* @& z' s% y3 Y# [; O5 G4 a9 N
输出:6 L7 q4 U( X9 @' m7 ?
: B4 i9 \' G* k. ]" X) [- ?
[1, 2, 3, 'a', 'b', 'c']
9 I+ p& Y0 {3 R* i8 ]  X
3 M- c+ J* t! z7 I2 X% G
/ V. }7 F! D4 V1 D7 ^1.2、添加元组9 h$ x1 H4 B( Y* I2 s$ l4 ]
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
8 _+ t. P; ~& H' B- c' ^. N$ O% c( @6 Q
list1 = [1, 2, 3]
' [' _; i  U, h* ]* Q; `tuple1 = (4, 5, 6)' J9 {* q' b( X
' s& [& S2 c8 G# p4 h
list1.extend(tuple1)* k9 L3 q2 w2 |9 D% U; ~$ ?
print(list1)" r, U1 b- Q4 T3 H( C
/ z$ [( V: U5 a* a
输出:+ L  m: \5 N% X

1 I& C' ~7 F* r0 b[1, 2, 3, 4, 5, 6]
$ q+ i, I$ L9 J- u. b- J4 t. l( X
( i, N5 I4 z) ~3 c' i4 B( O- z# b$ |. n9 A
1.3、添加字典  f# K( o# Q) X
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。  c3 n* V# j" ~
+ n! n, s5 l0 O8 b* J* s. p8 }
list1 = [1, 2, 3]
4 o8 F9 Q. j0 h2 `; c% ldict1 = {'key1': 1, 'key2': 2}
6 {  \$ w$ Q/ ?  {7 v5 d
3 e9 V' w" W8 a( A" O1 P( ?list1.extend(dict1)
' o7 W* p. E  J* ]! ]9 k" \print(list1)
4 Y4 @* J! n- Y( o" B, G! R( \% f# g3 o5 P  }/ @
输出:
4 ~2 f) V! e6 T* C" H+ W( w6 Q! ?0 u2 W0 }& a8 L6 n
[1, 2, 3, 'key1', 'key2']
2 w) j* n% G& w! o2 Y7 J7 J$ l
3 Y: ]8 n8 u# D) i( ~0 L8 i, q7 Q
) j' T9 y$ y' a* I2、原理解析7 i  y5 s4 d$ C6 I5 {, d. t7 z( B
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。- y& n( u9 L" e9 U/ Z
& w9 Y% @9 o$ z! [2 U+ c
, W8 o- g- K3 e* ]8 \7 J/ q

! r% n# W, a# P' L+ B! h: Q我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。( L2 E0 J* q+ I/ y. p8 k
$ B; G2 |5 f( P
list1 = [1, 2, 3]7 U* S% }5 K6 H; g' q$ F: `
list2 = [4, 5, 6]1 o0 e; N; l- ^! Z, b8 x+ u

0 m1 D1 K+ ]+ c; t% H( Yprint(id(list1))4 ~. t7 N- i' J4 P* i
list1.extend(list2)4 J  E) D: b6 M1 h+ g
print(id(list1))
/ V9 s, t3 R' |2 i* E9 r+ l. m' l5 Q6 [" ~$ C
输出:
( Y( ^/ y  l0 l6 S! M' \) ^/ d9 C! U$ c. T, |  }
1930566508928
/ X0 K: ^/ X$ m2 b- Y) u$ V# K1930566508928) o1 @' A; D/ H0 f* O7 b+ o

* t5 f; g0 \* D& B8 c, g! Hextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:9 p4 a/ `) P: r( \2 D. Y- n* V

$ {% D/ d- c3 I6 q7 tlist1 = [1, 2, 3]) }- K. }% j) U- Z4 ]4 ]' w
str1 = 'abc'
% O) k" `! R7 D: A$ R8 o  f' a' i! b& P. _
list2 = list(str1)
! W1 q! e; d. }$ l: Yprint(list2)
7 U  D( l8 p6 Z0 W( X5 R4 b; }) Klist1.extend(list2)3 U: [' W6 p; t; s
print(list1)) n; @- w" f8 z' }) [7 m

* X2 z6 S3 D6 ^  b; R输出:
0 `7 z$ b. _9 [% k, s7 S& z
; s" f4 V" ]0 n" M. T, P['a', 'b', 'c']
8 b% A' M2 a, A[1, 2, 3, 'a', 'b', 'c']
5 O, @* }2 h# D1 b- R
5 X" A0 _. M5 j+ a3 }- \- C6 y. e7 A5 H2 T& o; f0 ^3 o
3、extend() 和 append()、+ 的区别?
9 x0 r; t" ~/ T) o* q' T以添加列表为例& o* @: _8 t1 l( u+ F# ]' L/ ?& B

  A: t$ o5 o' v* F( l+ N2 Q' yextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中% A+ l; U' {" Y% A
0 H+ M3 W" c# c9 G
list1 = [1, 2, 3]+ @8 U$ |5 w5 M2 N$ n9 |/ I6 H0 R
list2 = [4, 5, 6]
. }: v, ~% R1 k% T1 Q' S* ^' {. Q0 y+ m
list1.extend(list2)* G* y& d$ \+ a: s( X
print(list1)
, {: y* R9 @3 o8 Y
) T0 b, d9 n' j* c' ^输出:2 x6 f0 q" j' L' |" D3 l) t# c7 p
' w# H' ~" s3 ~, P6 q6 b: |
[1, 2, 3, 4, 5, 6]2 I2 \4 _' x. A/ f8 [$ f3 n8 E  ?8 w
" @5 w% L5 M; z, C. q
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中) a* L0 A% Q6 i/ @4 p3 g, V
# [# a2 j8 ~8 d4 D/ `6 s/ [: B3 l
list1 = [1, 2, 3]2 c. g2 x! l6 b, N4 t) `' b: b+ f
list2 = [4, 5, 6]8 O5 }" v# c% Z

' U2 a- i- F! \2 \4 Z5 x4 k8 \% mlist1.append(list2). U# T6 @0 i  D4 R
print(list1)) l8 H' b+ z9 E8 p8 J: F

# ?' \- u+ c3 D' ^输出:
% N( R. O. U% z3 g) `6 M8 i8 K6 @; n" C
[1, 2, 3, [4, 5, 6]]
; u% i" v; `+ E$ P$ s# d
" H+ F% O, P/ ~0 ]' Q6 F% ^+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变4 h4 J3 I. X5 n" t
4 }+ a7 ?; B1 U2 {% D5 p
list1 = [1, 2, 3]5 n& {7 r$ Y7 T4 M4 @0 _8 Q* c
list2 = [4, 5, 6]4 v$ b9 L2 f* y) ]2 T) B

6 d' m; E% ^' `1 g) ~' o( @print(id(list1))7 v* U* `7 y7 J$ u, b, O
print(id(list2))
0 y8 d9 t* x: J( M% L  }print(id(list1 + list2))$ L/ W3 ?% X' u. \

  _6 F( u4 a" h7 _7 \; n& Y. W输出:
  `. k, x0 T2 y+ ?" ~2 S7 Y* }) ^+ O  I) y( f( \" U: e2 @7 W2 G
2680876376448
9 W4 S* c! n" m0 }# N9 }' O# u2680876376576
; h- v0 j9 B% a2680878544128
# H# E& v" R: u/ ^4 ^+ T/ \5 z& `
' b4 _# E3 d6 |8 v& t+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
% U- K  r8 D% I( K; M( _% h( j/ c, w
list1 = [1, 2, 3]1 j# o4 c0 S" Z$ a' K
list2 = [4, 5, 6]" E9 M& Y, x1 [! m2 k4 H! O4 M8 D
print(id(list1))
) t0 c& V& ]$ B& k9 }% E3 ?list1 += list2
  a1 W1 `7 U+ b/ eprint(list1)
/ [7 t7 {9 \) a* vprint(id(list1))
5 m% I4 v9 S- W8 C) i2 {, h$ y$ ]: |7 w, r* W/ o6 J- G
输出:
9 q/ `+ t- m6 Y4 e4 H3 c/ U  P
9 x8 {2 p% W  J4 O; _% \# ~2150265921856
& q) \* v+ T* v[1, 2, 3, 4, 5, 6]& y/ ?/ j1 H, G: Y8 w6 x& x4 V3 y
2150265921856. ]  {+ Y8 ]* K+ N/ v7 m9 N: z

0 i' s, X5 ~$ @% }
( v  H  [! e" \+ U& g! F4、特殊的添加方式
8 I! s7 }6 T2 b1 A- Q- h7 r. a配合算术「运算符」添加列表
2 P. j, ?2 N& {2 i
% M6 p( ]0 M( F; dlist1 = [1, 2, 3]: ]5 ^: @2 Y; F4 Y4 u( q4 v0 N
list2 = [4, 5, 6]
& `% q0 M: I& V
, x) @. v- ?/ |: \5 c$ q3 ylist1.extend(list2 * 2)- i, n3 J2 l* `1 |; ~" z
print(list1)
/ O2 T% T8 `+ olist1.extend(list1 + list2)
5 {" [) F# C: M2 Dprint(list1)
4 Z& y& {+ O6 J0 T1 m2 h, E, w9 A& c
输出:  n. v, B6 \# Y5 u( U9 d
2 v! q2 u+ J8 B3 H4 z* v/ y+ B; o+ S
[1, 2, 3, 4, 5, 6, 4, 5, 6]
5 J0 |$ U" R6 }% _3 L% B- Y3 z  {[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]+ m3 l# B% O" E& q8 C2 d2 I1 M
1
8 {" F% f# e1 H5 s3 o2
' b( b& i; @3 W: x- n「索引」取值添加列表1 K( V" S- e7 }8 m, w! G
* V3 Z/ ^- _3 V7 W4 ^( `
list1 = [1, 2, 3]0 R9 r/ `, r; v+ u5 V
list2 = [4, 5, 6]8 F/ E+ d  \  m4 s* v' E& L$ h% J
/ ^+ G* R: j7 s# V! S" `
list1.extend(list2[1:2])) H% t6 W+ e" v: q  d
print(list1)% [! W$ @7 ^; w& @) e/ a1 q& Z

0 w% S2 t% p, U& L输出:/ l  S( V! H, B) t( y/ y
7 e6 M  N+ t- R/ L
[1, 2, 3, 5]( D+ s& k, y1 y9 E  @1 n

2 m/ B8 {- E2 O' J* D( B. E
" _2 D+ e* F6 h1 R; s8 x7 O
. y0 ?- P) Y7 R% l9 M
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-16 13:45 , Processed in 0.375662 second(s), 51 queries .

回顶部