- 在线时间
- 468 小时
- 最后登录
- 2025-7-19
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7541 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2842
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1160
- 主题
- 1175
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解
$ p, U" f* t% R( X5 L8 K+ s m1、可以接收的参数% a6 S* }8 J0 F) g
1.1、添加字符串 B; e5 q1 s( Z2 e4 W! D
1.2、添加元组2 k" C6 y' l0 _7 V
1.3、添加字典
8 X* q( Z a0 a% y; Z: o8 r2、原理解析4 {4 M; ^2 k# l& F
3、extend() 和 append()、+ 的区别?( U% \8 f/ M6 [5 [% D, C
4、特殊的添加方式/ b9 ~6 b* a4 Y# Z* J0 h
extend() 可以在列表末尾「添加」另一个「序列」中的值。
; i- }, K& p u! F& ?$ S! u) `% @# \- e4 ~
语法
; u+ C5 G" r7 g- A0 B1 {: Y0 A, [0 P1 [# x# K/ Q
list.extend( iterable )
j: v. B' a# y3 p: a" B. G7 w' M* a* X P% o2 N1 m' g
参数
! k* ]5 N, \, Y# {4 i
1 |; Z V9 ^. n: ?iterable :需要添加的元素列表
* K/ m, A4 P5 Z返回值' E. H4 D! o7 [9 Q1 D
5 z; M. j- x. |. U! x没有返回值,只是修改原来的列表# j: K) |0 g- v7 E/ O: s# H% M
实例:向列表中添加另一个列表
2 r# O" A' L7 I8 }1 K' h/ p; Q& e( q* c# B+ I$ g- F
list1 = [1, 2, 3]. V8 l1 s. c. `3 g# l& T7 M+ Z
list2 = [4, 5, 6]
) S2 R& T- d6 d9 T! ~ o$ ^% T Q% J* x. ^ B
list1.extend(list2)
5 i9 \. m% O$ \print(list1)* B. a7 E4 \ @* F/ O
- g7 Y$ v+ V' ?
输出:% {9 d. A j: W2 _7 D2 p
2 Q. [! G! r. W) _
[1, 2, 3, 4, 5, 6]
$ \6 G5 X2 ?. M4 ~
$ X$ i u! [% T/ M( n% H8 U, q& J3 p! C4 `0 S9 B. ~
1、可以接收的参数5 d( ?' H' U, b" r' s8 h$ s
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。6 s5 l% o; k% U( z
' k0 D2 w- @6 r. w
; o- W; ^# p+ o K; o- W
1.1、添加字符串
) Y# g* B: y8 R6 _6 N) Iextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。- ]) | b" D6 e3 x" I
x0 K% j& P ?: Q3 ilist1 = [1, 2, 3]
" q$ @ \7 ~+ [( Cstr1 = 'abc'
; Z2 P, k- W) U* H& M5 _7 r$ q
8 u: h6 t1 o1 @3 W. vlist1.extend(str1)1 c t& u5 I. h4 d8 c
print(list1)# J+ H2 `9 R) A2 F
$ o% I2 Z. {: i7 ]) A8 Q输出:
2 q# S6 X+ w; V& B7 v p0 b1 k" e( ? H) e* s9 }0 A& `3 m+ M
[1, 2, 3, 'a', 'b', 'c']
: O' u( A4 X4 k
4 S! {! f9 r# q+ a- X5 _+ j g0 G( B+ D
1.2、添加元组
2 q' _5 N, |0 X! K- S$ P3 Qextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
& w4 @6 h# I$ g
& _( T2 a [3 U0 Q, C( {: ~" L9 Klist1 = [1, 2, 3]
8 N; k, v5 [) B/ Btuple1 = (4, 5, 6)
; D. m* G' @5 n- V
6 x2 N2 l# o6 M* b* ylist1.extend(tuple1)
1 k1 `) [ x* a1 F1 _print(list1)/ f; ~( H' X' B5 @7 ^
# `$ w# Y8 G) C4 Q) n& U" Y输出:
. W3 T3 Q9 h; m, H/ x9 _, A% E1 o* ?+ B( S; [; ~
[1, 2, 3, 4, 5, 6]( P; X5 `% V6 ?) }! \ S. _9 Z
3 ^* ?8 k$ {- x. s- k
8 l5 i; i0 S* z3 t1.3、添加字典) R2 h' Y$ T- u1 q3 }; J9 J5 I. ^' Y
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。) _9 S' l. z3 }/ y! U+ H
6 R9 l# {: j" N- nlist1 = [1, 2, 3]8 }0 U( \5 k7 |# ?3 g; L4 |
dict1 = {'key1': 1, 'key2': 2}7 T- t1 ~& W3 Y$ ]. G
1 ?8 F: S+ W4 w5 S$ I5 I- k* y. \list1.extend(dict1)+ d2 w6 T$ D% s. s. u' R4 A
print(list1)8 [* L6 R M; O) G! x
- _) b) ^3 h+ i2 l输出:6 G: ? D8 h3 ~9 y
1 w: w' I* Y5 w9 E
[1, 2, 3, 'key1', 'key2']* p( Q9 m1 ?8 n$ d3 P) }
. `4 m5 g" @- f0 i! q2 ~0 a% t. O$ \# @$ h) v8 p
2、原理解析
, z/ {: V- P( _+ c$ Z7 c! W$ \extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。/ q; e- O; p6 o) K3 M8 V+ d5 i
5 l" n( H& A' c( w0 j. i- j9 L* q
3 ?9 j) ?# w3 q9 X9 g1 g( l- b9 L0 ~0 E @& e6 s, ~
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
$ C% G; m6 J r" p& s- a8 o: h( t8 e6 r; r7 K5 E
list1 = [1, 2, 3]
$ I* r1 b) W' u6 \list2 = [4, 5, 6]
+ ?2 v6 N! K P) `5 u7 ?' g$ z: e/ E- B1 u
print(id(list1))
) O% k' u& v- w/ e$ l/ H3 Y: ]list1.extend(list2)/ t# ]) o2 ~' N& Y: E; N( [
print(id(list1))0 c* ]2 M% d, L/ n9 [. I
X$ P6 E; H# m2 i* S" r输出:
7 z0 N5 u7 V7 q" ^& L( r3 i! ^% F
# R6 G: z& n. c7 v! R; z1930566508928 B# X7 \" C( k1 x
1930566508928# O' r% |4 e; C+ j! b' C0 x2 \. l5 P6 A
# n- f1 W" P( ` n9 M: mextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
! {7 ~* ]7 ?3 F; L3 P2 r4 J: t) x+ x9 r7 z$ n
list1 = [1, 2, 3]7 }. \6 p% ^1 d+ M6 {
str1 = 'abc'
9 }/ j1 d4 D1 J6 ?4 t$ i: t7 e7 p5 t6 P5 u) L% y9 v8 x
list2 = list(str1)2 I W- f x; u0 v( ?
print(list2)1 O9 \4 q4 _- K/ q7 Y! a, E' s
list1.extend(list2)3 a( A- I8 U9 I { K
print(list1). @ q0 n' d+ O
$ J! B2 ?* C7 s$ H输出:) K3 V( ~* R& D/ Z, v
( ]6 q# V" j$ H( [- l
['a', 'b', 'c']! n# ^( c/ w9 X& S2 a) ]3 U: O
[1, 2, 3, 'a', 'b', 'c']
0 p2 i6 o* _8 w T. |
7 j/ J3 Y i: S9 Z
) b1 r2 A# h/ _1 `" l& x3、extend() 和 append()、+ 的区别?: `. k- y6 T/ z p8 t
以添加列表为例. _1 I# ~) W0 |3 \2 W; x
4 t/ R- H3 A9 Y; W5 Mextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
2 I& g9 w& M+ a0 ^3 `
9 T8 ^3 R5 `2 t( O- o# e+ ~list1 = [1, 2, 3]7 ]. c' }5 Y- K4 T
list2 = [4, 5, 6]" t+ f M+ W; W0 t4 b5 s+ }: ~+ T9 o
* W: F$ m% s' T
list1.extend(list2)8 c m* [2 }5 o9 V
print(list1)
0 V9 K! ]# q, ~( t, {/ A- A, j }2 i( k5 l
输出:
: o! g9 a* U3 B: }' K+ l" U' \ z- V9 b. m e
[1, 2, 3, 4, 5, 6]
' W8 \/ \; r. ~9 p( @' ?
9 m7 }$ \1 b8 x9 m" }append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中 \! Z, F9 B$ T" t/ e) b5 q3 H7 X
& G2 i4 `, r( K" x6 \5 g
list1 = [1, 2, 3]- S( g9 H+ v8 _: a! k
list2 = [4, 5, 6]
* D8 C" d& }* H1 i) c
B) y$ a2 }8 `0 E! Xlist1.append(list2)
5 _' g. a! j/ a, s9 X* tprint(list1)
2 _( k# w7 ?* d1 ^6 [, x/ y+ s- m4 `7 m. H+ \8 g
输出:
' H4 H7 f5 Q E2 a- t' V
- X# {9 }5 G' {+ K[1, 2, 3, [4, 5, 6]]
8 E3 C) ~, |7 [- J: S" p1 D1 |) U i$ w2 a6 P
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变/ p- c) d$ K4 d# ^) n9 o
/ z; y t" n2 j( `& p9 ?
list1 = [1, 2, 3]' `. O i; y+ X3 {
list2 = [4, 5, 6], }1 x' C6 e+ B" W. Y8 L
. p. S" `$ X8 ?! Y1 p9 |: nprint(id(list1))" _& l: ]; n8 [
print(id(list2))
( `' n( w9 [( r7 p) j) L W0 Fprint(id(list1 + list2))
+ Z6 f/ I! A) d3 }
% E2 {+ { |9 I' M! y输出:$ m% c6 w& o, e
" k& e0 ]- ]! N# j) R
26808763764483 q0 U' _: e1 C% C, e! d
2680876376576( b a7 o' S; Z5 F( F4 y: c
2680878544128! W; G+ M! m9 b' A1 ^# z
, J, @2 Y3 q. k5 V
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存7 ?8 V3 I' G5 E# C- E5 t
2 D2 z% i8 r2 X$ T( T' i
list1 = [1, 2, 3]3 j! V% W; r4 F: s
list2 = [4, 5, 6]
1 G: P' ~; ?: \/ k3 M, w6 k7 J5 tprint(id(list1))0 b3 ]# [6 y( l3 u r
list1 += list2
# n- X: |1 d! `/ i+ i+ t: wprint(list1)0 q; T ]$ X E# [
print(id(list1))
- A0 \ R/ R# r. ?: J- K9 @
7 U2 G' _; L3 C/ Z输出:5 A- ?9 J$ b- {! z
, Z: T6 Y6 d7 J. d4 @6 P' g8 i2150265921856) e+ ?$ |) N _ W$ U$ m
[1, 2, 3, 4, 5, 6]
" m& f/ [: S ~ V- [2150265921856
$ f u# o4 k5 w% \! p4 S; W$ V/ F! U
: m% F2 {( B. b0 o- T% k4、特殊的添加方式! `9 v' N1 Q, K
配合算术「运算符」添加列表6 V+ D% H+ z* V. i8 X
7 c* q9 n6 Q6 ]+ ~list1 = [1, 2, 3]
) G# b5 j4 B/ Q* Y+ w+ z1 Olist2 = [4, 5, 6]5 h8 u/ W. {* |& N1 V0 _1 f: G
' t% P0 r# O) e* D N) y* ^# k! s
list1.extend(list2 * 2)
# U; U0 v' r3 s3 Z! K% p7 C* Fprint(list1): k8 ^. n; x: j7 w% c5 S
list1.extend(list1 + list2)
) Y. W g. E% e$ E# z1 O1 Uprint(list1)# f0 x8 _" J/ Q# V" ^4 X0 @
* @" s/ A) a" A1 `& F5 _$ D4 [2 L# x
输出:
7 l) \* O' F/ {0 J1 Q: D' _0 t \6 S/ e, S
[1, 2, 3, 4, 5, 6, 4, 5, 6]( r9 _; P; P) N9 ^
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]; I9 B! z8 `! a2 }) V2 ^$ {. a! z: v: g
1, H! J/ R, n$ ]8 P! T/ O
2
5 i3 S) R7 t! Y( N% Z: U「索引」取值添加列表
+ k q) x' e4 j5 r3 D1 D# b; A7 W
list1 = [1, 2, 3]$ S% M- L, R. `& H0 o0 g* w5 F
list2 = [4, 5, 6]2 y, Z6 P# w+ k4 i/ B9 z
9 \) Z& z3 g# M# u T0 h* G4 H
list1.extend(list2[1:2])
* A% q3 B8 l* @print(list1)* z7 {5 }2 v% {
( A: N; w0 ~0 K( ]
输出:
6 X ?% |4 j" a' O$ q8 H8 S; x; b& J3 U' [! y
[1, 2, 3, 5]- A% G3 }3 h7 O- K# [% c
v1 R1 I) r: w) a* {
4 {& D7 d: i( ~5 J! L5 p3 z
; t `3 ^2 I6 x5 D
|
zan
|