QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解
6 Q+ m6 w; D8 q& A) S8 @, d1、可以接收的参数
) m* `( o! {; Z& i' q+ d6 O- |1.1、添加字符串5 j, [9 O) K' R4 v& m: n( b3 Z
1.2、添加元组9 d. T1 j  F* J% W/ Y
1.3、添加字典' `9 J# B& n8 X/ n
2、原理解析2 |, @. k4 H6 A; x6 u& Q9 o9 K
3、extend() 和 append()、+ 的区别?
) q' h! b% c$ A5 e4、特殊的添加方式, [0 |5 y; H% e( i
extend() 可以在列表末尾「添加」另一个「序列」中的值。
# {8 H0 P9 r; D& Y8 @% N! P2 e0 g& r3 O! v8 _
语法: w1 `" e! d0 P! E

8 Q  V) M# B; u6 m; Z$ I) c9 Rlist.extend( iterable )- P' e" M3 J. U! l- d

7 n+ Q" n, B: e8 L. n  M参数
& o7 `+ {- W' H0 H( |' @
; b, U7 g( g4 v# V8 ]4 Iiterable :需要添加的元素列表
' |! g+ B8 @$ c2 s2 D5 g3 I返回值
: [# T) s, ~$ Y4 Q- P8 Y; C9 K
% i/ w2 \" F" a2 W/ p- N) p没有返回值,只是修改原来的列表% _/ _8 o! \# V9 ?
实例:向列表中添加另一个列表$ g5 Y- v1 m, R6 [& Q0 B9 z

7 u% S+ ]) _5 t& G+ ilist1 = [1, 2, 3]
! \% l: ~# R! q2 Z& Y+ _5 {8 Zlist2 = [4, 5, 6]2 q" T- x' Q7 w+ h8 M. n
& t7 E* I* w# z; h: G
list1.extend(list2)
. i6 E' f" W% ]; Kprint(list1)
/ n4 z3 E4 ?- K! B
: E' S6 G' D" ^输出:
+ A/ r" a  i) P$ E8 d" R3 ?  @3 a! T) `6 T3 s
[1, 2, 3, 4, 5, 6]: [6 @  s, q% q& v4 x9 q
) v, Q3 }+ [  C+ m

. v$ b" ?  a, l) F4 {1、可以接收的参数* X! R0 K, H2 P
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。2 v2 O: N' h: r# B

" `* ?& {( J. v; K# U8 i8 w' [6 S5 \# [' `9 A2 `8 t) i: C
1.1、添加字符串
' V2 q# q, E6 X6 U& g5 c! r# }% S! c7 dextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
$ C4 c9 s1 N4 G; q$ b' P1 c  Y3 s. `2 a7 [7 L: ?# z
list1 = [1, 2, 3]
; Z& |' M! G* {) R( R. ?str1 = 'abc'3 \. x3 T; e8 ?. W1 g# i

1 K$ R: i" a. W  \5 x( Vlist1.extend(str1)
2 {! `2 G0 u! yprint(list1)
5 A' {, _0 s3 p  q4 u9 V
( m0 j$ [7 V( m4 r& i+ R& v输出:
* A5 S* A, j5 z6 ]
5 W4 D$ J3 t# F+ S  Q* _[1, 2, 3, 'a', 'b', 'c']
: D, l; u6 u) N' H7 F2 B" f5 o. p( F; m

8 M9 J3 j3 ^7 v4 R- h" w1.2、添加元组
- u6 v$ d) C. Z6 h$ N% o6 C8 J  S4 Sextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。& I$ U2 h/ x; ?! i0 l. X6 ]/ P+ G
3 q- E& _' u* A# Q* R3 m
list1 = [1, 2, 3]
6 J$ _5 E1 `: i+ ~3 L5 Etuple1 = (4, 5, 6)! o/ A/ N' |* q' d7 [
; p: |- @" W3 q0 |" X6 i3 R
list1.extend(tuple1)
+ A) U$ R5 q0 q9 |5 I! P* qprint(list1)
/ i1 ?, c6 U- U3 u. M- C' i
* X  C/ f, N3 D; r7 O3 T$ U输出:  H; k8 y' [0 Y

1 Q, q$ g3 c7 T! z[1, 2, 3, 4, 5, 6]  e' E0 V" x( L0 [: u

! C$ C) J7 H1 n: \; r1 w2 t$ z5 b7 x7 o% R* d2 _6 D( i
1.3、添加字典" K- o2 `8 s* G5 H( S
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
% m/ k. U6 p2 r5 B2 c
- ^& |( K- [# |1 C$ A' x2 A; O& Wlist1 = [1, 2, 3]
) E$ A+ L' X6 C& b5 B# M- g( }1 kdict1 = {'key1': 1, 'key2': 2}7 [! p8 v, ]% V6 u( L

3 B* Y8 o+ L7 X1 F$ hlist1.extend(dict1)
& W" b) k3 f* G' U$ O% f0 uprint(list1)
8 G, Z; e& Y6 J  f  C
* S6 @* o; [  F5 p5 X9 U7 _输出:. y) ~$ w* M, ~( O* T

- ]9 b2 i; j- `[1, 2, 3, 'key1', 'key2']
* _4 J% \- I( t- \# l" I: r# C6 d4 e/ L8 p0 v

" _) x0 i8 O9 S& H2、原理解析/ C; i8 F' K- C8 H
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。, p6 ?* O$ O0 i/ _1 X$ D

6 l+ }3 i" N% I: Y) R4 w. h2 s8 J
: h: q4 }3 {% Y/ a4 k+ T# h1 D/ J/ X9 D% A& }" M) ?$ j- U
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。" c/ }  J% @8 k; `, J) T4 q
( c) u6 U! ~3 {& T+ o6 c
list1 = [1, 2, 3]
# Q# _0 c9 G  ]8 m1 [3 Clist2 = [4, 5, 6]8 W4 [: _  p% G8 B6 z

# \/ n& ?/ y1 _# lprint(id(list1))6 T" @, m0 k4 x, e1 q$ M0 i
list1.extend(list2)3 h% q- k. c1 Q+ d/ H
print(id(list1))& ]9 x) v! k# O7 b, I

$ O% @$ c1 m( h; @, f输出:
+ U, l! G" o$ w3 }1 F' ^0 v
/ J2 j% g, F5 N1930566508928
& e1 L  L  a: c- Q" z3 H1 n7 B19305665089288 _" Q0 i# K2 F' M& ?! M

2 g9 H0 d0 X% @0 l, T. Bextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
) l; P, w" y1 u* K& B
  M2 t+ D! ~9 r5 D9 A: @list1 = [1, 2, 3], L( ~+ F3 R. N: s% y/ N0 `
str1 = 'abc'
; o2 N2 k, w; I7 ]8 ~' u7 U5 i, L; g7 ^2 }9 K; ]) W7 @2 }
list2 = list(str1)3 `1 G9 C+ m1 ?7 m6 G
print(list2)
: C6 x% u; |/ R* e: b( z) B9 alist1.extend(list2). l6 ^7 x% I' h& ]9 M6 ~, m( X8 g
print(list1)
4 i/ H9 C: `7 M& j
. `6 E) I  x$ Q- d) R# i6 Q. Z6 j- a输出:; s+ \0 }8 j& V; b- \  P2 a
( H) W  z2 s8 S% [) b( }$ t. f1 I
['a', 'b', 'c']
1 O: N" ~/ F% w: `) y6 A[1, 2, 3, 'a', 'b', 'c']
. W9 e5 L2 g: ^; [2 y. q% [( v4 Y/ s% g2 i1 }3 q; D1 r  [

8 X; n+ x; L% S: ^5 }0 F7 ]3、extend() 和 append()、+ 的区别?
3 _  x4 @$ n# j6 G! O  X以添加列表为例
: K. C% L0 h1 y* K9 u7 S9 V' u8 }9 u$ j, |$ ^) x% j
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
" m: d  m  Z" ~' {1 _# D
/ b  a$ X* ^3 U0 C1 g( Hlist1 = [1, 2, 3]
$ Z9 ^+ Y% q9 }4 Nlist2 = [4, 5, 6]
7 G6 q8 S2 }' O+ e! M! |5 q
( ~# U. W8 ?" X' v3 Slist1.extend(list2)
4 h3 {* q' Y, O8 M* b" ^9 l2 {print(list1)$ x' M9 q6 ]; }  q2 C0 @# Z

( v4 V# i+ r, `; f7 O输出:
8 Y& v. k$ A/ I2 }
: V2 n$ ]3 l4 Z+ r5 \; m/ J[1, 2, 3, 4, 5, 6]  Q8 [; P3 Y( L+ @  I
5 p3 Q1 K7 B( c: a" k/ y& e9 l2 N
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中& q) W! `: P7 V4 e/ m
1 @( G0 f$ y2 [9 A
list1 = [1, 2, 3]/ H6 |# v( a. Z  c* X
list2 = [4, 5, 6]
& |  P, t/ T: u, [! \  \; d
0 N+ ?2 h3 Q# C4 T1 ~6 alist1.append(list2)
& P( S3 V$ {- b* S: v2 \7 aprint(list1)2 Z; [0 P$ G5 |8 ~2 m, x
: v* x/ T2 i. Z8 T1 h1 ^
输出:! k, i& {4 g3 _( h8 s! i9 |

9 l: ^1 u4 F% c% C# c! o[1, 2, 3, [4, 5, 6]]
& k$ H+ W- _4 r) j0 Q- h$ I  c. o4 m. k/ W8 b1 q
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变0 U4 s, N8 }3 y& }) p
. R5 T  @7 N% }1 G% C7 L& p4 Y
list1 = [1, 2, 3]
( i! y3 N0 c# g/ _. Glist2 = [4, 5, 6]
& b+ H0 {' F' J- I* R) B: U
7 E' E  h1 a# e( Q, sprint(id(list1))
  V6 |) l3 S% `& U9 Wprint(id(list2))% x, U, g0 c3 o8 W$ g; }( _9 U
print(id(list1 + list2))
7 k/ a% W! P* D4 K: Z1 V& O; G$ E" {6 h5 L( K6 |
输出:
9 h3 u0 O' T& U8 n, ]: e. S$ Q+ S1 P
- B+ H. j+ ^9 B! G' c. L- X/ Q26808763764481 x/ p/ t3 R+ W* E* f
2680876376576, C  j4 ]8 x+ k; G1 Y" p( O
26808785441285 o* ]/ Q; u- z" q+ D8 u% k  \+ }

- Y( M4 D, g) |+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
* T+ ^1 f. j6 O3 a0 [) M2 p& s; Y; ]& c3 t& U; F  j  }5 s
list1 = [1, 2, 3]
" R1 s! @; K6 S0 N9 i" v/ ]9 D5 ^list2 = [4, 5, 6]
2 B" }& I" n. iprint(id(list1))
5 r$ j4 p# F% C4 w; ?. D/ o9 w* Blist1 += list2
7 ~+ _" W- m' x5 Q. P  Cprint(list1)
- K( h' P- t1 {! t9 tprint(id(list1))
# }$ h0 x& D4 u# R% F1 H
1 @, a! ^+ ^3 i8 F' M, ~/ a输出:
- M: L- F6 i- \8 d
/ u% P9 ~- H1 ^+ j2150265921856; n6 V* H9 E! u6 A) r' y
[1, 2, 3, 4, 5, 6]& T3 }8 Z1 k7 {2 h5 B( D7 n
2150265921856
8 K5 l; @% v9 E; H
- A" A' X2 t8 c& s: R3 u: p& E0 {4 `' x
4、特殊的添加方式- v8 C/ q; |) ~6 c+ d0 P
配合算术「运算符」添加列表" u/ F! ^5 w* s! b3 G7 x
7 z1 f/ H0 H8 q- a0 G3 e0 f
list1 = [1, 2, 3]
) ~$ Y& |9 V$ ]. J& [" |7 z- n4 Jlist2 = [4, 5, 6]$ r! e: j$ R! O! t
; ~0 G8 j3 i, Z& B2 D1 ^! f1 A+ ?- {
list1.extend(list2 * 2)
0 w' Q: T+ H/ n; p# x! F4 ?8 kprint(list1): K# {( c2 U) K8 a
list1.extend(list1 + list2)/ G$ z. x8 m+ \, U9 T) |. q- z
print(list1)1 I+ w8 O% ?9 l* D& p/ W! a/ ~# G, }7 x

. |& n+ A6 X% N& X) z1 h" ~输出:
% P% x0 f% d3 s0 b& Y! Z/ T6 h: t# [. U7 s
[1, 2, 3, 4, 5, 6, 4, 5, 6]
1 N5 N$ ~  B) U+ F# c[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]- c, E: x: T( p* H2 v7 x
11 }& O" ~6 n) Z4 {$ B1 z
2
$ r/ g, V& E# K# y! V6 N* J: i9 F2 E「索引」取值添加列表
( E; L3 o2 F; c/ V* v
. J( y+ K/ O, s% z; Jlist1 = [1, 2, 3]
0 K, L  y" j$ I+ Z. D" vlist2 = [4, 5, 6]
/ c, u1 p9 O. I6 I" o* w( S' a' E) f  o
list1.extend(list2[1:2])  M, s4 l) d( ~4 w
print(list1)$ Z3 k; \# Y- T6 D8 K( _

% g( Z, K3 r4 R, N' a, T* r输出:
# i" Q$ c9 \/ I5 i: f' @; C$ H: Z: Z" R& A/ u. `9 k
[1, 2, 3, 5]
- Z6 B) v1 q# }* Y  x2 ]4 L( N
7 }- g- Q' e7 Z. _1 b# \( o( P& W5 \; i' F+ j5 H3 _  L

8 _, i1 {7 U' X" g1 [4 z/ g
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-7-11 07:13 , Processed in 0.527001 second(s), 51 queries .

回顶部