- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解
, ]$ l9 {, N3 G& j0 j1、可以接收的参数* m) ?. n y! u- G( t
1.1、添加字符串
( W/ E& R$ `0 }/ V, Z! n' _1.2、添加元组& j$ ^2 b u7 g( U# i& O; R0 k; I: x
1.3、添加字典
; D7 U2 i; s; G! R) O# U: e2、原理解析
) z- h/ q2 u% J* X& p! l3、extend() 和 append()、+ 的区别?5 h8 [4 Y5 j4 s! ]
4、特殊的添加方式: u- e* w) ?6 U" R$ c9 W) X2 v
extend() 可以在列表末尾「添加」另一个「序列」中的值。
) j9 C) g/ T+ j3 R/ t6 U2 e1 z' i/ ] L( u0 h
语法
( i1 E) L& d( p# f8 r, h! ]6 `, ^) e- u5 }& y: _
list.extend( iterable )
7 w! A; E! \6 s: }3 O2 }+ j9 E ~" s; e' Z" G
参数
d e. p; A8 `) g6 D0 @; w! t; ?; X0 U6 \6 v" L& I: @5 V! c
iterable :需要添加的元素列表# L0 W" J/ ?& K4 g; q1 p3 U
返回值
$ x, ]! L7 l6 H( `- ?
! E5 P" Q3 q. X( r" O, Y4 b% H6 g没有返回值,只是修改原来的列表
4 s" n: y6 K6 ^( ?4 t实例:向列表中添加另一个列表
* K# r# j+ D5 |( ?+ c( u
8 g- Q7 i5 x- s0 ?5 P2 Wlist1 = [1, 2, 3]
* K% `4 N1 w7 O) Mlist2 = [4, 5, 6]8 `6 X/ I% m1 W) z/ T
3 B# X }+ N; ^- ^ z2 p
list1.extend(list2); s, X& P4 s5 F; i& [
print(list1), x4 P" w U, p" Y" \& q
( y4 T& x6 r; B d7 R输出:
: U) d9 [0 ~, u9 @
: H# p+ n1 i6 E/ r( a. U% L9 G9 L[1, 2, 3, 4, 5, 6]: K( ], S$ `% S6 z8 T
/ z! x' x# q# m7 U8 x* a
! c z3 Q3 a5 k1 f7 b' ^3 x* s
1、可以接收的参数' [. m3 s6 X2 D$ @
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。! ^5 X/ W: R. x" x8 J
# K1 C! ?. F/ J w" q, _# x7 x
7 ?- W7 @% A$ x' C$ L
1.1、添加字符串
' Z* A; E- g+ h7 [5 wextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。" @5 P) x9 e: c P0 C
, z& F$ ?8 b7 O; Z
list1 = [1, 2, 3]
7 `9 O9 o8 P( J; _str1 = 'abc'4 q" }3 N! T1 P6 s7 `9 ]. z; F
4 c. u3 c2 H u7 r( J1 |9 j) mlist1.extend(str1)
" h# t4 C& d1 ]# j/ h; `/ Dprint(list1)
: O/ w2 r9 a' N4 m, H/ u+ b& {6 K f+ S7 x
输出:. m& s7 K; {( f9 A. e0 h$ P! F% D
. b9 A6 R [: @4 B3 P! w[1, 2, 3, 'a', 'b', 'c'] O! |; |: k- b2 p! r8 P
# o$ T+ G3 R/ b( L1 J" D4 @; ^ W% i, d- l
1.2、添加元组
3 \, l# s% s% z' oextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。9 h9 {8 F: K' N& f9 a$ R( d" O
* g3 v" \3 h1 q6 w8 V* d; ]7 ^list1 = [1, 2, 3]
6 u5 W: h* H+ m9 ^tuple1 = (4, 5, 6)+ l# e# s$ }) Z u
* @6 c: h' P% |, @2 M) h
list1.extend(tuple1)
0 p& |# ]% u$ t8 j4 r7 x/ Fprint(list1)* d) c3 f+ |( \
+ b, ^1 {. Y" I) k输出:* E$ i* n& _/ ^7 {
. [! _5 O2 y; Q# ^& Z
[1, 2, 3, 4, 5, 6]4 a) J+ _% F Y; k5 r6 F
9 E! N% t- Q5 K; k/ d8 `4 c
( i2 f. f9 O% l$ @) i) L+ e/ z1.3、添加字典1 q6 a: ~3 N0 h B; D3 i0 N: s% Z
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。9 }; l% ~+ o1 P/ @% X6 y
9 o9 U6 k8 N2 t- t9 w0 o# X% Zlist1 = [1, 2, 3]
. ^6 q/ y7 w- Z* ^dict1 = {'key1': 1, 'key2': 2}
3 p) C8 U8 f1 ^- K. S9 n7 L/ `! O, w- h3 k' u H# W( G5 D
list1.extend(dict1)' b: \+ ]1 K4 v; D% t9 w1 m
print(list1)5 L6 q1 H" j5 A$ R" L
7 B; m% K+ z$ S输出:
3 b1 `* K( x/ _3 P; V2 g0 C" N3 j
9 n* |, M3 i7 ~/ ^( H8 B0 \9 t8 s[1, 2, 3, 'key1', 'key2']* b1 P* W1 e: h3 T1 ^- }- N8 `
2 g$ ]( l Y @: Y
5 z) N5 O6 b; I
2、原理解析
$ x2 x1 F, i: J- S& gextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
6 ]" x( o) m1 s% P8 K9 ]" r7 ~. j) d" Y1 m5 T [/ X+ P2 n! j
5 r5 s ?6 k5 y- l6 ~
; d5 u x0 d# I) J& A' A我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。5 O4 S% [4 ^. a. a$ i
& z- j) G, I2 B7 O5 Y% a7 b5 `* `2 ilist1 = [1, 2, 3]
8 l2 ~1 f: l! `9 R! I5 vlist2 = [4, 5, 6], C% e( a, a. B- W. W1 n, g/ g
5 Z3 z. [8 Y" C- Hprint(id(list1))% ^# r6 m2 u3 [1 Z% D! M" u0 \
list1.extend(list2)
6 H, s' h0 k, e* a! zprint(id(list1))1 j1 R3 r; O, x- w M
( e; l: i. u0 T& u% l输出: r+ m; H& o: H0 `6 M
+ m3 z8 {- ^* Q) {
1930566508928+ m& J1 G; u0 _
1930566508928
& {( m% P1 ]. L8 X- K1 l! E' e$ D6 d6 p5 G `) l
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
0 v) z' X" |3 ?# D# O3 p( L+ V- a% J0 y7 Z
list1 = [1, 2, 3]1 W+ R' S" W5 G
str1 = 'abc'1 ~8 U$ |0 s8 e. I: N! C9 r/ g& I" @
y8 V; F2 A- q5 k t7 D* W
list2 = list(str1)' W7 d- y& C( k6 }5 j
print(list2), d$ g/ ~7 z7 Q m
list1.extend(list2)
6 J7 R8 ~+ X0 ]: }; xprint(list1)
2 y- z' Z# g, s* V M7 o
( J& X. J7 r6 x" ^% Z输出:
9 F. B4 ]' M( L" v1 F' O1 j1 l3 @4 _3 p8 n2 }5 k
['a', 'b', 'c']7 U! K$ p2 _/ m% `5 G
[1, 2, 3, 'a', 'b', 'c']$ u, J! K" s3 g- `
* v3 z, y+ U& I. P
. e5 w) A3 q3 R- x) @3、extend() 和 append()、+ 的区别?
9 ]# j' @9 L/ M6 n( ~8 K. x: X以添加列表为例0 G; l- r3 S- K+ u
2 h0 A8 k: W5 F
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中+ o9 f- |" Z4 N( k4 Y
5 [+ q2 r6 L. `& E4 m4 W& f; Q% {list1 = [1, 2, 3]6 ^ Q3 R, |4 X7 B
list2 = [4, 5, 6]% f& K8 ~; p5 M/ ]3 ^ G$ {% k
) Y. w. v# s$ A) q, J' @+ u% B( ?list1.extend(list2)
% h9 Y9 T5 S5 _. Lprint(list1)) M+ u' K# j v$ s, G1 q4 x8 d
: g" b. n3 b1 Z" H5 o6 `) Y
输出:
0 r, V v# x, \) b6 D7 s# C5 {1 v7 Q f. G8 e X3 X: ~
[1, 2, 3, 4, 5, 6]
; I8 H% D, O& q' Y6 J$ N5 J3 E- }$ i( t0 e o
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
- F( g' g* {- ?+ X3 F; w
, Y& g# ?5 N# O5 C9 }6 A8 ?8 Jlist1 = [1, 2, 3]8 L5 \9 y) I( W% {4 T M% W
list2 = [4, 5, 6]
" y, g* p5 k7 K( [" ~5 E- ]$ c: ]& H2 p1 [! s" P
list1.append(list2)4 n. g$ ~* O8 m1 G v
print(list1)* A, R/ Q: S0 y& x8 N6 `$ C
) a5 U$ Z" Q5 q# u$ x0 R输出: [: ?- V* f) }+ X6 r
! Z/ _6 g# [4 G+ X7 D[1, 2, 3, [4, 5, 6]]0 v, g! s0 K- w2 ] `+ s
. H: G9 W, H. M4 u& M' E0 f+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
# |% D1 k2 A# U- y3 C3 P4 V' T" U0 D" h' J, T& V6 W Y9 G' @
list1 = [1, 2, 3]5 A( U* G' Q1 d1 R, i
list2 = [4, 5, 6]
! ]. K* ^2 l1 e6 L, Q5 U- d
2 ~& |- Y3 @( a0 }& X% K* T$ ?print(id(list1))0 A" |7 S( Y0 `! F6 w6 n
print(id(list2))
8 J2 L- ^, G8 j E" vprint(id(list1 + list2))/ p0 e9 x# t; a$ j7 F9 M! K2 k& P9 E
: U& @" S2 `1 x g
输出:
9 g# S" E- J; f5 [3 @: q5 M9 E# s4 s
2680876376448* x+ T3 {: j+ J+ G" f* F
26808763765766 c/ E" I/ M4 a; R
26808785441287 V, H5 p3 g% C8 Y0 s
5 X: o9 ^) `) g1 F% Q0 l+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
" l! E: V% N4 |9 k6 C; c! V, f+ x2 C% C0 V
list1 = [1, 2, 3]. C, ~& x2 N2 {4 D+ B
list2 = [4, 5, 6]
; ^2 Q- L" Z" z6 Cprint(id(list1))+ l+ d1 x) W- @- W( |( N
list1 += list2. l4 S$ w+ H; a
print(list1)
, h$ V9 a/ m6 L; D- ?print(id(list1))
7 c/ i+ e& k; K2 ~+ B/ u
. p7 R' _/ t0 ]5 t; f' |输出:
4 n2 c) W% i( [! U. h X1 V' }
% j- \- e# h! E/ M5 O4 P* s: P$ r2 N2150265921856
& T3 m- a: g7 O- e[1, 2, 3, 4, 5, 6]
2 z0 Z$ R' v1 @9 W8 S7 I2150265921856
- B$ Y7 i5 t9 O v; p# C6 ?" ~% A
/ x# Y! X7 g1 l5 N+ Q4 l4、特殊的添加方式
1 l6 m j' V y( G$ k3 A- M配合算术「运算符」添加列表
: t- x5 ?" \! H7 g1 V. l% {1 m# f0 N; S, D# @0 G1 ^9 e
list1 = [1, 2, 3]4 y( h% H- `6 B- L# d9 h0 n8 p
list2 = [4, 5, 6]1 V$ D9 M( x9 S
9 U6 ?9 l9 p. v' i& F1 Elist1.extend(list2 * 2)- @: b3 }. ^8 E( Z; _# z
print(list1). O: c/ ~$ H u0 V8 Q
list1.extend(list1 + list2)
: U( S3 z( _+ u6 K; i& [print(list1)# V. @" S5 }8 n6 v; o8 n" F, K
0 F; E2 n/ _$ k, ]5 W0 t输出:* D1 j0 o# `+ C/ w
' L' E1 S R: S- n' d% z; F[1, 2, 3, 4, 5, 6, 4, 5, 6]1 Z1 G% F; r8 u4 x- M$ F8 y% E
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
7 v% G9 w! A4 c( \6 |15 u- R& a& I, ]6 u( N6 M& r* j
2
! s0 n( p1 O$ y「索引」取值添加列表8 Z+ W) A3 ~$ V. U3 U
& t" u; M; t7 H1 _ X+ {list1 = [1, 2, 3]
5 L$ Q' \# G6 D M( y% xlist2 = [4, 5, 6]
3 ?% t4 q* G i8 B/ R# O+ o/ }9 V$ T& S# u H2 S E @. a
list1.extend(list2[1:2])
* Y( i) i9 ~/ V1 tprint(list1)- ? l. J" F1 M' A
! ]0 c/ Y' w+ @( g! t% U
输出:
# Q: V; ^, L( G6 i2 W0 m8 ~) W( z/ S7 T* Q& G" _; Y; ^# P
[1, 2, 3, 5]
; \7 C1 U$ q% G8 S1 ]& v4 V. ]3 r! {) h: n5 T
K1 U+ T X# B
, z A! g8 i4 }% G7 r |
zan
|