- 在线时间
- 463 小时
- 最后登录
- 2025-6-26
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7343 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2781
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1156
- 主题
- 1171
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解 S2 p: j6 _9 a4 q" H7 D8 R
1、可以接收的参数
3 A+ |4 S3 t6 _" J) Y8 j1.1、添加字符串; a a5 P7 r% e1 e0 ]4 _
1.2、添加元组
; @$ a2 W* H* {# V3 t4 Q1.3、添加字典
) C" M3 X2 u! D! G- x2、原理解析
9 Z4 d4 N7 V2 h( T/ A3、extend() 和 append()、+ 的区别?
, D, O- @1 }$ X; U: \$ a* \& p4、特殊的添加方式7 y# o/ b5 z) r4 D5 o
extend() 可以在列表末尾「添加」另一个「序列」中的值。; Q" I( k. `1 N
4 g0 d; w" ~0 y o3 c6 {语法
% _7 {7 L9 ]9 z+ D/ P
4 a. H7 a) u7 Rlist.extend( iterable )
8 U* ^8 L v" q% G. i6 E, z. R9 I- o4 R ^+ B# S
参数
9 N0 G5 q8 B8 s; Y7 g" R- v
+ t, ~) i+ o2 V' Z% [% W- l2 g1 literable :需要添加的元素列表1 ]- ^6 [5 g$ y7 V+ E9 Q
返回值
* \0 _4 I; J; n5 O4 B2 K
# [) z: j1 _1 T6 @# a+ |1 r没有返回值,只是修改原来的列表+ Y4 Q( S) l4 y; A' P; Z
实例:向列表中添加另一个列表
# T# r4 W$ Y- b4 ~3 G$ X6 \" q# f$ E
list1 = [1, 2, 3]/ ~: H) t8 A6 r& D' @
list2 = [4, 5, 6]* N: v9 v# s# ?. l! t
3 O& T/ s) ]5 X
list1.extend(list2)
) _' E$ \9 r# j" |1 jprint(list1): y# _2 e/ a: \' q, p; W, v2 }" x
* O0 u" [, y% z* t( i& @8 Z
输出:
) Y* p+ K4 y! ]! ~9 x6 |! g' U `: y% G
[1, 2, 3, 4, 5, 6]
& j A! p# K4 I, i( D0 g
# S5 ]5 `7 w# S2 }
7 o% U/ a* t& U {$ a1、可以接收的参数
" P8 W- r* n3 R d y! Sextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
* L6 V7 v/ ~9 h: `$ L5 l9 c" |, H& H- i& @6 C1 K
" L, U! v; ^6 d9 B' a/ [ a$ T/ ^. e
1.1、添加字符串; |' K0 B& s0 M. g- h H
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。# h( h) E' I1 C1 o- `5 F' f; G
( g: L% q9 z" plist1 = [1, 2, 3]4 H6 \) d* @; k
str1 = 'abc'
+ _8 [4 V+ F9 a/ B6 Q$ D# l+ S- S7 n7 h8 m
list1.extend(str1)9 Q* e l( a2 s. {# f( E8 ?! }
print(list1)+ p j% d+ D+ @, _5 }" P: V! O
" n+ C$ n# Y% U( M3 c! w6 N! O输出:
; ~* |/ Y. K8 H' [7 x/ A
; `5 _% N% ^' D& E, R5 E[1, 2, 3, 'a', 'b', 'c']
0 O! _+ X; e! C/ H2 Z/ s) q; w4 [ p
4 d5 u3 s8 Q h) n- j W1.2、添加元组8 n! ]+ r8 J& w
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
9 Y6 o) T8 y( X
" a3 `; h0 J0 u* X( rlist1 = [1, 2, 3]
1 o$ v6 O' O7 A! f6 u; `tuple1 = (4, 5, 6). `3 s9 E! w0 M
% m! O9 @, d9 O' Y& M) Z' hlist1.extend(tuple1)
$ n0 T; [+ i! P5 m7 bprint(list1)# L% s( g5 r# `& {! i
/ J( W7 d7 W8 ]. s2 Z输出:, w; \# O0 P( |, N6 Q7 C
5 B/ I- k- U0 F8 X" S: \% d[1, 2, 3, 4, 5, 6]
4 }+ \0 t+ W' e7 @0 T% L! T7 E m# H, ^) J2 p& t; d
/ L# H5 N( Z5 r/ J. F) ]1.3、添加字典
! S: T3 i( ^1 R: {) Textend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。6 L/ \- A; _. o m: Y
! Q6 u a% z! E& F% jlist1 = [1, 2, 3]( ?* q u6 k9 ~+ ~" H- M
dict1 = {'key1': 1, 'key2': 2}
2 s G+ T8 l. B" K* F
- a0 e2 _$ o- F. S. v2 \0 m, f8 Elist1.extend(dict1)3 N, ] ?5 N- m) s' y& k
print(list1)
4 \0 _# D+ k; t9 C& O7 a1 I6 ~, l2 Y& r8 x
输出:. U+ R: |5 t5 }
* ~# Y6 f) |$ i6 T1 i# d[1, 2, 3, 'key1', 'key2']
4 E ?% ^4 F. S# G# T+ ?
. O$ {: a6 T) z% J8 X3 v! k6 s1 l' U9 A. d% w" t, f1 _8 [. j4 t+ K
2、原理解析: e) f, Y$ f0 a4 T6 P; Q
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
$ @8 S2 {" {5 I) g: d
* t' r6 ~ O5 R2 z' C3 v1 I& b( g5 F K- p9 o. S
. R. s+ |. x2 u7 ?( R我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
6 |" s; C% k: m- j! d1 N
8 Z! G/ }; N* J9 Y+ s; P1 i4 a, m/ ~( ?list1 = [1, 2, 3]
% d+ i0 v5 U. ?list2 = [4, 5, 6]
/ n8 b1 S; Z; c$ ]" X0 {0 E0 K9 m5 K; J2 [& B0 `
print(id(list1))) t( R: O$ L+ g6 B& ~7 I6 c
list1.extend(list2). p! f2 K6 P$ F! ]
print(id(list1))
/ A9 _: F& {( H. m3 O
$ q: i/ V/ [2 V& [* Q- S' L输出:7 M) f8 g1 f& W0 u$ j
+ M, v3 n; ^. r
1930566508928/ x% F# Q& k# ] B- N5 b8 U/ E5 H+ |: \6 g
1930566508928
3 d$ F; D4 L( @, l5 {" ?) S
X# r) @ c1 Wextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
3 l4 l' Z0 k! s# W; e! f
& I- O: f( Z( h5 L+ h Dlist1 = [1, 2, 3]
8 q# ?1 b! `0 C# q+ e7 n5 Istr1 = 'abc' r+ W0 G% l0 e/ A) U
; p% u. r% G* X: E* n$ ^list2 = list(str1)
. @# p/ Y8 w& b( Mprint(list2) w* B9 F# n+ q
list1.extend(list2)
% O' o& w0 T' {print(list1)$ o/ H5 g' J! T8 L* q) ~
1 V# T8 Q+ p7 T4 Z* Y输出:
8 ^3 M* J4 d) r- t' t& k6 Q1 Y" Z# Q2 c$ n" Y I" \) @
['a', 'b', 'c']
/ I' J* J1 ?5 p[1, 2, 3, 'a', 'b', 'c']
7 m, x) B) O; W" V9 _3 K* n M: g% F+ w
; c) e0 M: K, i% X3、extend() 和 append()、+ 的区别?2 }4 X: Z) X6 r( m |1 L/ f
以添加列表为例
$ i4 f: S0 _( M0 }2 A1 n' J) M& f$ L
' W: {! S( ]! E' F. A; e' U1 yextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中8 }$ g9 q S& [( R6 |+ U) G+ }( A: T
; e# H" \ ~, ]2 slist1 = [1, 2, 3]7 b6 P9 ~) Q$ p
list2 = [4, 5, 6]5 `1 C2 S+ u, f; w
5 Z" g- I0 F6 u7 nlist1.extend(list2)
# x, g2 f8 \8 p- q' G/ ~7 Wprint(list1)
) s, G5 \; x! e o2 ]9 Q; b1 x+ F1 J0 K" m) [
输出:/ J$ ]8 u- j3 d+ o- {
( X3 w1 D3 ^+ {$ s/ X3 }[1, 2, 3, 4, 5, 6]7 R6 P6 `3 q& [& A! s7 J/ D
. S; Y5 ~; K) Y+ K, xappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中! r) t- I9 X6 S& ~9 M$ D: P
. J, S1 x! P3 S% U2 q8 Olist1 = [1, 2, 3]
3 f1 ]- g! Q: Y! `; { y" ulist2 = [4, 5, 6]
1 r2 i: T: \' {7 D* b
. i# e( w* q# zlist1.append(list2)
+ c* u0 b( l2 z. jprint(list1) Y7 }' x" _& g3 J* Z7 p8 g
' ^$ Y5 i- p3 T* M2 j4 @1 t: n! [0 H, x
输出:
2 ~* l+ d( u4 B3 h; ` Y0 V! K9 z6 y
[1, 2, 3, [4, 5, 6]]
B2 E; U$ Q3 f& D% Z+ m: f3 M( \# W) t/ ^; Q2 a" G& f' H6 b3 N
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变. ]6 U5 {) L( S5 r. Z
( a$ B; [ d4 R8 ]- _list1 = [1, 2, 3]- [; f8 l; r, E* E6 g' `2 r1 W
list2 = [4, 5, 6]1 k( j; [7 n1 Z9 w7 `
: q: N5 O8 W: Qprint(id(list1))2 `+ r( N4 } L: J
print(id(list2))
6 u# ~; [8 z! [print(id(list1 + list2))
7 o. e8 V+ \* \) J
* g- I. y3 K1 k1 x输出:* s- X7 H& g- N8 G' c" A7 ~
9 N" J8 [$ W% H( o2 Q$ q$ B
26808763764488 B4 h: F; \1 U; k5 _5 U# p
2680876376576% C, e5 |: T9 r" k( w
2680878544128* b6 g/ @5 \1 c( l
0 q) F( L7 r5 R: H, Q/ Y
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
. O$ {3 U+ Y& q; S @6 I. d; f0 T( {
list1 = [1, 2, 3]
: ]) M* d3 t- @( l. {list2 = [4, 5, 6]
& k" w W! U3 Q# W% W5 aprint(id(list1))/ |0 L0 ^7 [/ L8 }8 E* E+ t
list1 += list2
: O% c% F/ h1 ?' h/ \# n8 bprint(list1)/ H7 f- R+ t; A% E7 M+ G G
print(id(list1))1 K) I/ f" X3 s! j0 O$ P6 `
$ w, b# ]/ s0 L3 b1 ]输出:6 Z4 |- ^5 Y2 l
( u7 _# g/ Q8 l
2150265921856% g9 D) l- f# y* ^+ n0 P& J1 f
[1, 2, 3, 4, 5, 6]
% u$ B* P# t+ [1 h# N2150265921856, h" b/ r2 ^/ e+ I, f
+ F3 v+ _1 M, ^& Q6 L3 C6 n6 u
: j' V$ r/ y, l7 v4、特殊的添加方式2 S+ ^" P( _6 H* Z) x+ X: G8 ?
配合算术「运算符」添加列表# T6 Q. m( a) y4 ?
4 i0 R( ^) H9 N' n' u* ^( Ylist1 = [1, 2, 3]
2 n5 ]' b+ N; i/ c! l vlist2 = [4, 5, 6]8 d2 N1 B: ]9 n
. O, o$ M/ b# u
list1.extend(list2 * 2)( h i* f& E/ Q' Q0 U$ t0 s+ ]/ w- z
print(list1)
/ ^/ k2 w* \& I+ O. V) hlist1.extend(list1 + list2)
& C+ @& |; v$ l- yprint(list1)
6 U0 A' u: n3 a, s: Y
" f) i( \. G2 N% Z/ n! B5 _! x0 o, U9 \输出:
* M4 P* ?9 e1 ]9 @! M* U" _1 s# B/ [* _" x6 |! K- w/ ?
[1, 2, 3, 4, 5, 6, 4, 5, 6]
# @ u- I0 a& H- _( ?[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]! A- T6 I. a* P) F5 j, g
1( {$ d+ p3 ?0 d
2
+ { N* T5 \% Q0 i. S「索引」取值添加列表
4 C, W9 @# o. P* | M4 L F# I; l1 ^6 f5 p d! r5 |
list1 = [1, 2, 3]- u. ?7 o5 s% D. G$ D( l
list2 = [4, 5, 6]
% |# z8 w: h. H
9 l! a% X% i. e [, l& Dlist1.extend(list2[1:2])
" S6 |& Q+ k) |print(list1)8 p% i8 o7 M- L* g4 y5 P. t
0 A; Z/ }% U$ A
输出:
4 `: N/ }: d7 G; t P' s* z% H6 x; M' R- e2 [/ ^5 s; c ]9 _
[1, 2, 3, 5]
+ F/ z( s: I% E& v, V# B* c+ c" `: W) w( P8 o/ I+ _; `7 ? z2 Y
8 w# g& l2 {7 w1 n7 y& }
* V9 G4 }+ |+ E& A1 x |
zan
|