- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解
9 d' P$ N# y# Q1、可以接收的参数2 J3 H- Z: R; z0 f+ M6 e5 [) T; A3 J5 V
1.1、添加字符串( A( K7 w: p/ E* J# G: {
1.2、添加元组' Q6 s$ G2 W0 m0 t* @
1.3、添加字典; ~* Z4 C) x n* {
2、原理解析
; W( t+ H9 ?& W# s3、extend() 和 append()、+ 的区别?
$ f: j/ n' @! V! x4、特殊的添加方式, }9 u# A. q0 p( |) C) Z# k; L0 D
extend() 可以在列表末尾「添加」另一个「序列」中的值。9 u! S3 s0 N( N, a: m! b2 W2 J
6 |1 a$ z \, I$ {) U+ @
语法
+ V" U; c; U3 v6 b" N' [8 v: n5 @9 |* e2 M" k9 Y( y+ c: q( p
list.extend( iterable )* d+ d i1 C. s# q8 _ N5 ~
2 r% q1 ^5 E& W5 ?2 ?
参数7 y: P* B9 K8 K4 @% X
2 b* D6 M/ {% ?% l7 }7 Q" ~9 ~iterable :需要添加的元素列表
0 K s; c8 P- f }返回值
, s5 `1 V" Z" T; n# L9 L X l, t1 q3 V$ X$ U
没有返回值,只是修改原来的列表5 n$ O# b2 A a- o# `- A
实例:向列表中添加另一个列表+ Z6 U$ ?" r% v7 I, V
; t+ l) M9 }" p$ v: s; H; { L7 X
list1 = [1, 2, 3]
: Y- r( {6 |% a0 P& A1 S7 N5 ~list2 = [4, 5, 6]3 H$ }( b/ m. q3 a+ J% D
' j* H- q. c1 J& q- R' v! u* b
list1.extend(list2). }0 z- Z; z: i! w
print(list1)
& H9 X3 ~9 p X4 d7 {9 |
6 y' Q4 @, |& i: Q5 k* G输出:! h0 \8 K$ O" t' z- A
! U$ Y; y$ j! ], h4 B+ j ?[1, 2, 3, 4, 5, 6]1 O( v5 Y' }8 \, z# k
& y8 @+ | v5 @4 g( Z) C
3 D, Y) W" d, J: j1、可以接收的参数# e% |3 y, Q+ c1 P% E0 ]: ]' m: n
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
7 k R7 P& w6 x, s2 T, r! a D: f1 P1 Z+ @& j* C* A
1 F0 E3 E m! J& h! ]( F
1.1、添加字符串. n# o$ V, X" h" o
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
' R4 L6 a6 C, D$ G2 f. y: o5 L H! Z6 k$ u9 @9 u2 P6 ?0 n( X7 Z
list1 = [1, 2, 3]
2 ?) d9 K2 Z6 u \0 Vstr1 = 'abc'
0 Q# ~$ {% F: W4 I* y) e8 r/ u' I& M2 U) B+ g
list1.extend(str1)
, ~* u, J" L3 ]: C: n2 H) \) pprint(list1)9 y% g) E5 U6 Q' m
* h$ k/ |5 @0 P
输出:
' s/ \$ j1 ?% }
* {, ^2 w. }8 \[1, 2, 3, 'a', 'b', 'c']
' V0 R Z0 N. Q5 T7 a) O9 d* h; ]; e! b% z
" e0 f ^. a# A; c; n, c* \
1.2、添加元组
7 a) ~- k7 d7 ^# Q4 o8 P: B! y4 E# ^extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。' C0 T1 a% z2 E4 d3 R! o
6 Z. z$ O/ S) {- y( ^$ Q
list1 = [1, 2, 3]( C7 ~ {: z8 g3 j
tuple1 = (4, 5, 6) _. n2 K! }+ g3 A, N
% Z0 ?8 X$ H4 m7 {& D% A/ \list1.extend(tuple1)
* ], v: z- M% G3 R5 u% j# |print(list1)- m( s. H8 [2 ?' E6 _
; z8 U" A9 x& Z) l输出:" t' x' }) g; K+ @ v
# d+ u+ p' N4 t& K( f[1, 2, 3, 4, 5, 6]
' y+ N% ?2 _) C: @! B9 k* d+ l C5 k0 l+ l
' \ T7 w; W7 R1 }
1.3、添加字典
" L2 ~% b( M/ h/ l; f& mextend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
# Z" J1 O/ U* K7 A0 t9 `, R$ u4 e( x# k2 n) Q ]2 ]( i
list1 = [1, 2, 3]
+ K, ?. S: L/ U: {: xdict1 = {'key1': 1, 'key2': 2}0 E0 B2 B( O, T( {' A/ i
0 Z4 _7 x4 k7 f4 m( v. U, Wlist1.extend(dict1)" O+ l: N/ K( c/ I |# u0 F) r
print(list1)
2 C6 V2 L* E# L2 }! y% V
" j( {" ]7 T) s2 y, {输出:
$ k8 O' E9 ]* a' ?2 [
# l' F5 ~' C( k9 y) k; Z6 r1 Z[1, 2, 3, 'key1', 'key2']
9 g, A9 x7 b2 ?. [/ E( w+ U3 G; z- C5 Z
6 u) _* H/ i6 r1 @& F- Z2、原理解析# @" E5 ], f% |1 X x3 R& U
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。7 ^ b' G z4 ?: ?7 D
6 p3 R1 g1 _, S# [$ O0 b
. [1 V" B4 {2 s$ }: R2 S' n4 O- \' U; R$ c
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
0 d" {) _7 F# b" k& g9 m7 B4 q$ V4 |+ L
list1 = [1, 2, 3]
$ u5 a( I7 x; [3 ]! V+ u% tlist2 = [4, 5, 6]+ b; h* X u. E! N
3 c/ H9 K e% Yprint(id(list1))
4 G, N6 v V ^( }$ V: N4 dlist1.extend(list2). ^/ I3 z2 \; H5 y
print(id(list1))
. {9 S" r/ m" v9 z
4 j5 t( ?: {% M( u I" t9 E/ @5 M5 s输出:
! J3 h. A4 @5 E2 I- o+ Q1 M+ n) I& r: N. s
19305665089281 q9 Y; x& w' o" U
19305665089286 f# V$ j: w& L F
; {3 y; l+ ^" ~* _* O
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:- p, {- x* N# C5 x) q6 J
7 m# {6 h0 H/ @: plist1 = [1, 2, 3]3 V! g' V* ~8 |0 o9 P2 u& O
str1 = 'abc'
0 z6 \7 M8 C; l& _0 _& Y0 e5 ~% N5 s6 b6 e2 I3 k. a1 J3 K, d4 `- ` ]: j8 t3 D
list2 = list(str1)
- N& i. n/ J' p' X5 Aprint(list2)% L/ w$ h" w/ C* e
list1.extend(list2)+ {4 {4 O7 b, q
print(list1)
4 ]# U: ~6 k1 d s7 c6 N) F; d: J( k" m! e( [( u( Q; R
输出:+ \7 D/ B- `3 L" {# P
& v2 \$ u& \7 ?0 r" o9 C( J3 d3 {['a', 'b', 'c']
1 V* l8 b& u# d6 s4 f* \[1, 2, 3, 'a', 'b', 'c']
2 h M& z+ z, z s1 i! p6 A# V
' \6 s" C) U& I! j& A" \# l( q& t$ A% p2 q# B' V. h! {7 s: A
3、extend() 和 append()、+ 的区别?/ h7 ?0 r1 ~7 z# A) H7 U0 E
以添加列表为例5 I5 j) e3 B' F; ?/ N% D
/ }4 D2 x! t" U. H! w ]extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
9 D: X7 e5 W: I' O0 x6 \7 {, \; v& x% Q* @! B
list1 = [1, 2, 3]
; @7 k4 M; z1 r) v4 m" ]' e* Z# Flist2 = [4, 5, 6]7 M# E. ^" E3 E9 Z/ g- g4 S
9 l @ `5 }) i- S4 y4 g
list1.extend(list2)
" a- F6 s% n. o1 s8 m- R$ d1 qprint(list1)
8 u% M; j( f6 A/ h+ e7 P7 \4 N
6 \ {4 o7 W; [$ \输出:! p4 n8 V, p1 U+ E& m
6 B8 _" ]: T4 D* \+ ~% h1 `8 F[1, 2, 3, 4, 5, 6]
% C& J. a1 K- t
9 n; W" U, v* Nappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
' g$ S0 C0 S, I A3 V2 M' s; e
1 s3 s6 T+ r I3 {- Y! P Dlist1 = [1, 2, 3]) W0 c) i# q. r$ b. }
list2 = [4, 5, 6]
' c+ f. x0 [' F1 c, k* J+ I: ~7 t4 T5 Q' t% Y6 R& i4 V- K7 Q3 `6 Y
list1.append(list2)* e5 u1 V) K2 ^3 w8 i0 r
print(list1)
' j- B6 T9 {( z) B4 m8 x7 ]$ V, D% [7 ?8 h7 p3 [
输出:
1 X0 ~( t7 G/ ]: _ V6 l: r8 `: v! H: d) P1 i
[1, 2, 3, [4, 5, 6]]
/ s9 P. D, ]5 m! {4 S" |' T: a( d4 \1 T
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变- L: _/ L. s& _5 u, i+ n
# f# t, X8 b; N5 q6 S
list1 = [1, 2, 3]
; N3 u8 I2 _" c, ~2 j# L) H1 Olist2 = [4, 5, 6]
7 L. u0 g* f* a8 B. n' ?9 H7 B: X* s* N& {! ~; X/ f: Z
print(id(list1))
' x6 W1 Z/ }1 c3 @print(id(list2))& i8 E; B2 x' K: @. ? [) r% n
print(id(list1 + list2))
/ [& B" S6 H6 U" k' P8 B
; t# M4 i4 c& W输出:
4 ]% F2 V/ U) R& H* V; a
% [5 p: `$ ]/ g0 y7 G1 ~2680876376448; I, C* F: v$ P% R: E, v
2680876376576" {8 h) W v/ `
26808785441282 ^6 S3 j- ~8 n0 H
0 ] r; i. x. z
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存( d* D3 {* o# ?5 k7 t# i$ \$ m3 w
3 H" r2 H' k7 W4 G: H( F5 t. z
list1 = [1, 2, 3]
& y, |+ e4 e0 @* u4 @list2 = [4, 5, 6]. ^ g, ?/ `* u6 v- d$ E/ Q
print(id(list1))
9 U% l/ S4 d$ M5 [- glist1 += list21 n( ]8 i1 T' L+ U& ]* ]5 P; n
print(list1)% P9 R7 E9 t3 Z n4 b. K
print(id(list1))
# F0 L8 j8 R7 b: e$ M: d) m( z$ ?$ y
; a( ?: D( Y2 F! D! M0 g. I输出:
9 S3 Q; l+ z" j! N3 y# T6 n, D i# L9 F: W% N- E7 |
21502659218566 f0 j+ A! _9 O3 e4 ^
[1, 2, 3, 4, 5, 6]9 D) L9 V I r
2150265921856# Z$ D& L X+ t7 h2 }
2 M1 Y$ E7 J8 \9 g% t, z
' I8 h# Y( R) f$ c
4、特殊的添加方式
8 r+ z8 J0 s9 u! t6 f5 f. h" [配合算术「运算符」添加列表+ r% G. P* k: \1 z
: Q3 Y4 ^/ J9 F+ _, |
list1 = [1, 2, 3]
! s1 o$ r8 @8 [' e4 S4 Alist2 = [4, 5, 6]8 ?+ @/ V" K/ ]2 H* c7 G" z
6 p3 E& q G" d
list1.extend(list2 * 2)
- S8 }5 `/ p4 Lprint(list1)2 y0 N1 u6 S& ^9 @+ A
list1.extend(list1 + list2)$ F& I$ V) ]( U4 e4 ~! U
print(list1)2 Z, i% |2 ?% Q7 n2 P3 Z" ]* M
& u: J, y0 q. M* ?) W- Y! Y, ~输出:
+ B, ^4 E d7 v/ y. y1 l; `. L* I: p- @) U A
[1, 2, 3, 4, 5, 6, 4, 5, 6]0 v& @/ [/ q; Q- z% K- N" `
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]7 U$ p7 f; K3 F! M1 W3 I
17 q) R z( i" d
23 T0 |/ Q- Z8 F: I. v$ l7 z
「索引」取值添加列表
U2 S6 G1 e2 }) @6 F( s! C/ M( Y d: P
list1 = [1, 2, 3]2 L4 M! |: g0 s W/ S4 K4 S+ k
list2 = [4, 5, 6]
" t6 x4 \( j a1 X) y' Q
' D/ c$ X: |/ J3 _3 @- Tlist1.extend(list2[1:2])
- d1 l+ N9 \3 t0 ^0 Jprint(list1)
- N6 j2 J& ^6 [* x
5 J' I+ G9 y9 Q2 v( l0 ]输出:
6 q6 R6 c8 T7 T2 x, a& _& O: `' I" K* y% c: H* d1 B
[1, 2, 3, 5]2 L" ?4 t+ o9 ` Z6 h7 `, {& `) q/ ?2 g
' T) U5 E" T8 L7 N `! z1 T" m$ r) ]" f- E9 K1 {
! X; l2 @2 G" C6 }+ \ b% [# s |
zan
|