QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |正序浏览
|招呼Ta 关注Ta
extend函数使用详解+ A% C& [3 ~. J6 t) P  I
1、可以接收的参数
7 L( f& a: H% w/ W* O( d1.1、添加字符串
6 w, T/ k  J. e1.2、添加元组3 L9 A( g1 b8 d9 L4 d; N
1.3、添加字典
5 ]3 |5 y" |, }+ ]1 m) S2、原理解析  O4 w  Q( B) I1 q% i& v
3、extend() 和 append()、+ 的区别?
% Z# d* o: u! j; V6 R# A# J8 j4、特殊的添加方式
: r  W) s5 l, G3 Q5 B8 j- dextend() 可以在列表末尾「添加」另一个「序列」中的值。% A$ \6 U. H* n8 F: M9 ]$ J
- ^% a# T0 @  H3 w! o! K/ ~
语法
# g2 K; J; h2 M, ~4 O
' K6 }+ J' L% H5 w# m) alist.extend( iterable ): M/ _  }) @) L0 t6 K
+ R- z( u/ E0 x, B6 |7 @2 O" g
参数) l$ Z$ q- u  k2 c

- q/ I( v2 O. h/ n/ i* Ziterable :需要添加的元素列表0 |" N( j! J% C6 x- n. _. t  i/ D2 o
返回值
* `1 H2 @6 X- G, J' Q3 G$ D0 B0 \3 i" I9 `3 e& M- k
没有返回值,只是修改原来的列表9 k+ \) P6 T0 @" F4 ~9 o0 V
实例:向列表中添加另一个列表
1 B" C, _& e1 t+ z8 |9 V1 U2 r) U4 K  u8 x/ F) i
list1 = [1, 2, 3]4 ?4 c+ k( }: Y' N+ w; N
list2 = [4, 5, 6]5 ?5 P9 a, ]1 D+ G7 Q

0 a" f! _$ B- ~# E1 @8 H$ T! Slist1.extend(list2)/ o+ J1 q6 `2 s) ~3 Z3 s# C
print(list1)
1 r/ J) ~9 I& R# ^7 D/ b9 w2 r! i- e  _% y
输出:
( A; h3 t1 Q$ p, M8 i
7 ^5 d2 i+ c2 e[1, 2, 3, 4, 5, 6]1 X# Y. n9 D. A& y' l

. B. v( f$ k: M; [4 x6 ?
7 B% e" U( g) N. @1、可以接收的参数
2 u+ H- o7 M; b+ D! K+ Uextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
2 n' e# P8 K2 S  n7 D" z
" U" e+ H5 H# s! }5 e( n2 A  S" B* u2 A, Z7 x: c
1.1、添加字符串
6 }, o2 [8 W, z' Q! K& Bextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
8 L: L8 W, @. L  s; N9 ~- b* k, Y+ L! h& q$ m# u$ `
list1 = [1, 2, 3]
  o& _2 m) I- }str1 = 'abc'
" |+ ?9 K+ o4 ^# R6 f- D5 Y7 d
, e  q( t  P) J# X6 g0 \( ~5 Plist1.extend(str1)( D+ \) n7 f, q. k8 ?2 D+ P7 L; C
print(list1)' Y# Q% p5 }$ E+ X+ A1 ^

0 S' Y/ A* r4 Z! g8 s' o输出:
- N3 Q9 a' u5 v" {; [
3 K) e, b( W8 [) R[1, 2, 3, 'a', 'b', 'c']7 y: p$ s7 D, D1 ~8 |2 }2 D
  i& Q( y# h6 `0 V5 A+ h

4 K2 i$ u3 U& E1.2、添加元组
  e2 y# X) ~; u- C) e1 F% `extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
* r. D8 I4 u/ e1 H) Z* R6 w+ N
list1 = [1, 2, 3]1 b' F  P* L- g: V0 N: {' i/ B' n$ p
tuple1 = (4, 5, 6)+ r! P' ], X2 X7 D% u
3 g; d# y/ ]- J: g: u, N6 w
list1.extend(tuple1)
% F% T! I  Y$ k+ S( Cprint(list1)5 q, f; l2 X! \* @7 n

) j( a9 h( q- k' X% U. A输出:# \- \/ a, A$ B" Q7 P

1 i9 o5 E9 m7 j$ X/ K[1, 2, 3, 4, 5, 6]
. B; t  i5 U3 j; {
* [( j) s+ @7 k7 E, z6 k* ]! y; D& ?" Q* G2 I
1.3、添加字典, [- h* R0 E! K& C
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
; M" q/ ?0 @/ `& \
7 Y5 V5 `# v  h. y2 |list1 = [1, 2, 3]9 p9 y% k, b9 k- V; N
dict1 = {'key1': 1, 'key2': 2}
: c5 e: H. _3 ?. U, ]3 f+ D0 [  p7 r3 F8 j; m+ m( Y4 `6 T
list1.extend(dict1)
/ O0 Z& T  A* U4 w1 Rprint(list1)
0 m# k  V& \5 D7 B
: m; a6 C+ w# I8 l7 V0 J. N3 b" q: ]. Z输出:
: y& ?8 D/ c5 q0 U% O4 Y& Z" m& |
[1, 2, 3, 'key1', 'key2']
* T9 n! d# t6 U0 d% @1 b
9 @5 q7 K' p, u9 O) F0 Z1 h7 H$ Z8 V9 `( O# p* u9 b; _
2、原理解析
* I9 |) u& |+ q0 e5 f2 y( mextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
) _1 p8 }: g1 U) B* C/ U
4 o5 n& D& X) a% S6 U/ L7 {$ r/ I* Q: t
/ e$ h4 |6 D; {2 a/ }. V1 V4 C2 P
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
9 s+ x2 ^% t  {+ M1 G9 h1 a
; ^: |( I4 y2 R0 `; I2 E3 rlist1 = [1, 2, 3]/ u- ^) B8 X6 e( t
list2 = [4, 5, 6], w# Q5 v" ^3 `6 z! ?& H

! q( @( s: X7 qprint(id(list1))* O& W5 P. U6 O. n1 l
list1.extend(list2)) S" A1 m2 R, J& O7 b
print(id(list1))
6 ?# q4 M, b5 J! K" D% Z8 s+ j) j9 f  c! j8 ?
输出:/ L; _/ X& N/ ?, e- J

& V: G) q, ~; c( P. F! n) D19305665089282 s  ]* f, |* N% e* B$ Y
19305665089281 o+ E9 B" k5 N& Z
" x; V5 U3 r# ^
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
2 t( w# _2 T. f( v+ Z3 O) K9 s8 a+ E* |5 X
list1 = [1, 2, 3]3 b1 p# w0 Q0 A/ W4 @5 G1 ]& Z/ r( g0 k
str1 = 'abc'0 y7 F0 D2 B5 m. @& t
' M5 w6 K# ?3 f4 B4 V
list2 = list(str1)& q. B2 q% h, [: T7 [3 L
print(list2); k- R9 Z7 B2 ~0 _7 K& U4 V
list1.extend(list2)6 \' v: a0 |% _! W
print(list1)/ ~3 o- O/ K; Z4 e

) X% M( g" y6 @5 V/ k/ F3 O4 O/ m输出:( J6 k0 \# U" V, v3 Y

: t/ O& ^5 Z+ q4 [8 @) V- K! B['a', 'b', 'c']; [& H  a; A" m* m  M
[1, 2, 3, 'a', 'b', 'c']+ G+ n" A/ J6 x: Z" y" O
% G* T! s4 T6 w. ], W0 v# h

4 J" _9 W. y) S6 f3、extend() 和 append()、+ 的区别?4 q: Q; r- H# Z1 U
以添加列表为例
! x- q1 r+ n* g7 @5 ]. {( ]* k' }7 \
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
5 j- z- i2 G: W. @
7 J) e+ }% v' D( h: [list1 = [1, 2, 3]- d7 k: U: d; V) a# b$ Q* J* }. g
list2 = [4, 5, 6]) G) @: U* `! D6 L5 l% `$ \* Z

5 T/ z' O1 r& _* P$ ulist1.extend(list2)# }, z0 @3 a" d( q/ h  ~$ V+ b4 s: P
print(list1)
/ ?; q' }+ }/ n0 O- _* T
3 P6 k/ t9 j/ V1 l$ v+ Z6 I" t输出:
) Z) [+ Q8 C* e, ~' N: g) c& F' g) W4 _
[1, 2, 3, 4, 5, 6]
6 O2 G4 z' O+ U# M" I. @& A0 d  N# q& Y3 W' E1 \, a6 [/ n
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中0 ^* J# t& R$ o6 `% A7 ]) @

% k) v# u6 }! E) d/ K& Jlist1 = [1, 2, 3]" f  @: n( p6 `, ?: x5 Q
list2 = [4, 5, 6]* R5 ?4 |  P4 [7 K* p3 g
1 i; g6 B& m8 l+ a; O" l
list1.append(list2)
* `" A$ |$ H  uprint(list1)
) I$ g4 v3 C/ ?+ _  O
# Z& b& m; b. k3 s2 m* D( Z( |输出:
  i) y) m7 g: n4 F% d) H$ y7 v* j' q5 Q4 Y# a; j0 c9 H$ N# d
[1, 2, 3, [4, 5, 6]]
# N5 C! G# g7 C2 `+ p; }/ f+ u
& S5 w+ Q4 l, I+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
& ?% \( S7 S$ h, s3 [: q; ~4 D! y$ {5 ]: |+ m
list1 = [1, 2, 3]& g) |1 a# W$ D  m" N1 t4 X' p8 v
list2 = [4, 5, 6]/ n9 P" }# G# _! z$ |0 e5 F

8 c- S+ b0 t' S, c9 Tprint(id(list1))
' u$ q* |3 f- F- r; vprint(id(list2))6 z: m" L: |+ _3 S: C6 V
print(id(list1 + list2))
- c# d. b' R5 y  e' C) s5 S1 u. c
5 X* }- k0 |9 s" x2 _输出:! \# L' [0 g0 b2 z. T

. W% k# H/ C6 Z2680876376448- `9 ^& v7 w( P& y& J+ H
2680876376576: H& X3 x2 V+ R* O, G5 C: b" W
2680878544128' \9 v3 A" c+ s1 b0 _
1 |8 \4 m. g3 u+ q' {9 v
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存4 G1 l1 m: F6 h$ S. I- Q
* f& R" Y+ c0 z9 |, n( X( }4 B
list1 = [1, 2, 3]
+ \' h. q1 O, V& S6 J8 {/ ?$ Clist2 = [4, 5, 6]
: o( R5 u& s1 v/ Uprint(id(list1))
% h7 \+ T, C! t6 t% S# L5 Wlist1 += list2
! h  P. Q. M- M) y7 W3 Vprint(list1)9 b9 u# H. E# J3 G, H  o8 @
print(id(list1))- |: @7 D) N0 |: X9 X3 u
3 q* x$ C& R7 H. P- l
输出:! |: O4 Q2 E8 N+ v  ~2 z4 e$ I
4 v) h, R2 t5 I  f3 z
2150265921856$ n4 |  t+ k9 |' d9 ~
[1, 2, 3, 4, 5, 6]
8 n# G7 R3 L9 J7 d3 d# u- Z9 a+ c1 v; Y2150265921856
  k+ k, P4 v5 Z& d$ \7 M
1 U! J1 k' F+ U9 D
3 B- w/ T! t7 D  ~, G$ p# S+ R4、特殊的添加方式6 b/ R8 y! |% \
配合算术「运算符」添加列表
- g4 d& n& Q0 K
' T  t) \4 u5 r+ `4 P& P0 qlist1 = [1, 2, 3]" o0 x, H" t7 a6 G
list2 = [4, 5, 6]
$ b+ x- B4 V! _" `/ o
7 b3 v% q% y* w5 v0 k; K( Ulist1.extend(list2 * 2)5 ^* l7 D' a: V
print(list1)1 O3 f/ \$ K/ Z1 {  ~
list1.extend(list1 + list2)
, Z7 x  ^2 o" }: gprint(list1)
9 u- Z: U+ n/ F5 C) @; }1 F# @
5 y' b  w2 f8 U: `$ V/ S9 K. o1 p3 L输出:3 V! T' A# j* }3 r1 }& t8 k$ a
; `" |1 \- o% i; G0 D
[1, 2, 3, 4, 5, 6, 4, 5, 6]
* L! s+ X8 x  n! t1 ^[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]0 U0 S5 y+ {% ]" i
1
. V8 u( r) K- O& B* ^2
% t% Y$ T6 c. C: p3 [* c「索引」取值添加列表3 n$ O* M& |8 e4 ^' Z4 c

. F  `* Q+ f- a5 m4 Z" Y9 llist1 = [1, 2, 3]
* W8 I% a6 J4 g* Jlist2 = [4, 5, 6]
; c& j/ |/ N( y" r! I8 o' Y0 _5 z8 s! E2 x+ b
list1.extend(list2[1:2])) C) s; B* [& e3 D7 m, X9 w
print(list1)
1 e, C+ G# T8 O$ t9 H7 z+ l
/ h4 G( `/ G. @9 h输出:
' a8 [3 [; W( C  t* [1 ~: \. |2 N3 a% {, ^
[1, 2, 3, 5]
; P# v# n/ Q' r; A/ X) H* [  b0 j% ?  [# _+ {; Z7 _% s
0 U5 d$ Z/ m  s7 n0 I, K7 J
6 _: ^! ]- ~( d  ^
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-8-4 21:23 , Processed in 0.408339 second(s), 52 queries .

回顶部