- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7953 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2978
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解9 I0 J. c) S; A5 w! h
1、可以接收的参数( q3 k8 E6 t, N! ]+ D2 k5 ^. V1 }
1.1、添加字符串# Z$ T: i+ E% N
1.2、添加元组
. a8 V" F$ ~ J& T1.3、添加字典
0 Q0 X0 H1 f! ~- \( _, S0 Z2、原理解析. l3 z! s" y8 N: g3 f
3、extend() 和 append()、+ 的区别?# u3 F7 N# _$ B$ @, O Y0 D! _
4、特殊的添加方式. n! s0 T. A& q# ?
extend() 可以在列表末尾「添加」另一个「序列」中的值。" Z, w' f; o6 c( G
& J8 z, e# s6 F7 x6 K语法
: A3 H* ^4 X* D4 y
% P, M6 V2 v9 X& [% flist.extend( iterable ) \9 `+ v0 u k; O- P
* Q7 [/ X3 A5 L. w3 D
参数( H& U4 ~. \+ q. F" U. e" a
3 O; n; _, e6 w4 R" U
iterable :需要添加的元素列表2 m! O+ @* @* h/ s! H" @
返回值
3 P0 a' \! k1 j- s$ ?1 X0 B7 b4 R1 O* `3 e$ ]4 K) i
没有返回值,只是修改原来的列表
! q) A& f$ ~: S2 L* x3 D实例:向列表中添加另一个列表- x4 t. ~) }4 \9 `; C1 Y0 F+ J' _( p0 N
2 C% E E' q! I
list1 = [1, 2, 3]
5 u8 b& M4 ^4 w' X/ r6 u2 Alist2 = [4, 5, 6]# @! y# {3 V. G. O/ A8 ]8 M
2 ~0 S; J8 \9 g( m3 F$ X- T
list1.extend(list2)
& |* Y% u9 z2 b4 X) P+ i* fprint(list1)
& s- u# x0 K) P/ s! C, ] x2 q6 w
( y) ]) B6 g( R/ C输出:
3 \! W; W1 `& g8 o. W( ?( P o7 w( G+ _# L
[1, 2, 3, 4, 5, 6]
; [; N2 g* P: M; e* I9 D* e% I# T) Q5 `9 U! b5 {
' b6 G, ~6 _) t- H" z$ _' p
1、可以接收的参数# w7 |) P5 k- j
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
0 h& J+ b. U% n7 \1 a: e' a1 A' P1 E: D* \4 \8 n/ x( U- n; M N8 o
( x; s2 j4 r3 h# c' ^1 o
1.1、添加字符串$ \8 S3 B9 B! ^2 W" u' i5 |; w2 }3 v
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。* Q& ]# M# J$ z" t3 C
5 \! U. w3 f& w2 G
list1 = [1, 2, 3]
6 b. A3 h- P1 I5 G6 a7 `str1 = 'abc'% }: n: }8 e5 k, I, W& _0 B4 {$ \
) y0 F' i, F9 U3 H
list1.extend(str1)2 t, {7 Q, E: I/ A4 o* I
print(list1)
3 |2 N2 P1 h" w& j. g: l: q
% y* A0 e) f4 F& c G( L( ?# J' T输出:
2 L. @* B7 w) J
* u) |/ I6 Q5 Z$ u+ K: y7 g[1, 2, 3, 'a', 'b', 'c']
+ `" y6 C9 c; W# C
' C0 I# K5 v" W" W/ G [5 G7 H( n9 |& M$ Z( Y
1.2、添加元组
; X: C5 u& T1 v3 P, ~9 o6 cextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。4 c& f; I4 d& n$ r' h. ^
4 ~4 U: U. ]. b! ?% E ~4 r# Clist1 = [1, 2, 3]
) d# U" {5 ]8 v9 Rtuple1 = (4, 5, 6)& x+ ^3 y0 D6 I% c
% l# W. M; E+ ^5 I& W2 C. v2 \8 qlist1.extend(tuple1). H: ]$ F9 I; L+ Q/ ?/ C
print(list1)5 l1 _6 B k5 l5 U+ \7 J
* n5 q4 l" Z: @9 ^4 m# h j8 O输出:* t3 z. x4 ?7 i K- p! \
2 l8 t. G0 ~$ ~7 r- n& ~
[1, 2, 3, 4, 5, 6]* q x0 n c. L( U& X
9 E( ~3 ~% c' `: Y* n( F5 c
1 C& }0 l+ D/ w2 W4 v& U5 W1.3、添加字典
+ p. }- c* F# @' p% {extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。" H3 } V; Z( L
+ ]( i6 }5 i: _
list1 = [1, 2, 3]& r. o$ u" H; n9 }
dict1 = {'key1': 1, 'key2': 2}/ n0 t8 ?6 ]/ \7 l7 ^! c, p
: n1 j" [2 \. S; c7 U3 `+ N0 E3 ?% Klist1.extend(dict1)
# g) X, ?$ C, d# o2 Bprint(list1)& E9 z K: L6 X% h
2 G- Q3 x0 c2 w/ k$ r) q
输出:
+ f q- h, o0 G" M- Q
8 O/ T, [4 v. M[1, 2, 3, 'key1', 'key2']
# c* k4 i' K" y+ P& S; U) C K3 P8 A4 K9 ]" M! e
2 k, G; j1 ~7 P" O0 i2、原理解析: [9 r7 Q7 A2 u+ s5 c2 Q
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
; [- k0 F$ ?- R! j- o0 Z( h- I8 N6 x0 F5 h) T( n5 m
! v3 n+ O( P0 K1 I; E; p! f- U
. A4 z) x3 ~" n3 ~( N我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。! O0 s, X, n1 S- d% b
, U9 Q: Y" J+ n# P- F8 o- [list1 = [1, 2, 3]+ W" L) d: j* h/ \# L, H
list2 = [4, 5, 6]
1 l5 q1 b) \ g% W9 v' v1 l* z( y, b) T% t- {4 J9 f7 Y
print(id(list1))! n* L) |3 Q: r% v6 U9 d! ?0 |7 c
list1.extend(list2): I& f8 w. K5 U' C
print(id(list1))
4 f Q* S& ~# u: ] }* z! X) L
% [1 @: o% l7 q; B H: ?9 `1 v2 N; u输出:) ~: d7 V4 v5 }3 X4 @
3 K3 s. B9 N8 r! |: u
1930566508928# M$ R2 W; ]2 ~ ]. i3 q
1930566508928
2 k: p+ [) C- k @$ Q. }. \! U% D5 X
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
( D5 y7 e/ A4 g$ R1 L" }% F W7 b/ l
# l. Z8 r% {! L9 Tlist1 = [1, 2, 3]1 g2 N7 Q5 _; t
str1 = 'abc'
: [$ {8 S( `; V5 u3 n: B2 B( c4 Q; E, B/ U3 a2 v; }* P
list2 = list(str1)
" }2 ^! a1 f: o: d) jprint(list2)# c C8 B( H- ?1 A0 i4 I
list1.extend(list2)
9 X# L o# S$ R8 P' s, S" Eprint(list1)
' w( X. u' T5 h$ ~4 K7 P8 U
! n0 \6 ?& n1 V/ W" T输出:* l9 B* d& c" |3 b5 s
8 } u# O; B* G- q4 k3 e['a', 'b', 'c']5 |+ p7 f7 |- l3 A0 }3 y" v5 c
[1, 2, 3, 'a', 'b', 'c']
; `0 U. h9 R4 R2 @: P8 x4 V) n: p0 a' J7 w( {$ P. ^
, b" c1 _: S. L5 u$ [
3、extend() 和 append()、+ 的区别?
' [2 ~& ~: ~# e- j以添加列表为例
9 P6 m: Q! R& i6 J$ T: F: _6 y4 ^) a* B" P
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
6 d9 R5 B/ f) H) L0 G( v" X! v
- y" ]+ ~! [- G- Wlist1 = [1, 2, 3]2 t9 c. L- w$ B. K" D/ l( A- n8 H
list2 = [4, 5, 6]; j) S- J3 |" z
& k$ Y, i% C( ^: ~& _* [
list1.extend(list2)
( S7 O6 x ^6 eprint(list1)( D: p, t. Y. B1 r( [& ]0 G
; s! @$ @6 s3 h输出:
, Q! x3 k; S# n* L: L' y1 Q s7 C, }% P! I1 _" m0 K7 k
[1, 2, 3, 4, 5, 6]
2 s. p4 g* _) ?0 a( v2 @( |/ u+ {+ e8 L7 `
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
; f; O! ?& S9 o1 Q% z9 P
/ W6 E. H2 j* R5 clist1 = [1, 2, 3]+ T9 [* Z$ ~& ]
list2 = [4, 5, 6]
1 g9 P" L1 ?8 ^5 }
" ~' I9 U( \( {/ {+ }0 {2 Blist1.append(list2)! W% h9 a% U7 {' J
print(list1)' g( a7 S- @- A2 }
) R: i* s. e, ^# \输出:6 J& L3 f5 B5 C. P( U# C
1 a/ S, O2 @ ~8 d0 L
[1, 2, 3, [4, 5, 6]]& {) e' ~) p4 r/ r; @2 q/ A
3 y. j2 A7 E# P% j K+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
& ^, ]/ E& s9 L* d6 q: u+ R9 {9 E. f g
list1 = [1, 2, 3]
" a; h+ z, C! V5 Olist2 = [4, 5, 6]
, Z; L3 `8 Z4 W7 h) Q, [; ]; b7 L6 v
print(id(list1))* U8 h5 s& C/ D* U7 C
print(id(list2))
$ e, P; W7 w) k* qprint(id(list1 + list2)) V5 V/ Z" y# M3 j+ a# ~
6 s# D1 e, X2 h9 |( D3 X输出:
) `: s( K. T& M) V1 S8 A
7 q: N' ^5 _5 q8 o# o5 f' E5 _5 G26808763764481 i: v$ n7 a: g6 C$ Z! v
2680876376576. ?! S* [0 u; n6 v
2680878544128
6 w3 m0 m4 k4 }; V5 B1 r
9 N& l" _9 x S5 Y4 ?+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
* k- E% G+ F6 v) C% E8 i
. s8 R) G$ V r1 [1 v" ?* {+ jlist1 = [1, 2, 3]
/ H, a! n3 {( @list2 = [4, 5, 6]
1 I" h0 M5 v6 A( q4 u) s+ ]* @% g! _print(id(list1))
h* q% X+ y V$ f9 Y( y$ k$ m! Rlist1 += list2 E9 r( Z9 R: [8 d0 N" ?
print(list1)
/ a9 M" T7 Q& o5 `4 Nprint(id(list1))
0 I' g% [/ z7 G- o
1 c" N" z. p/ ~输出:
, s3 ^! U) G* ]: r& T
! R+ b$ X; @0 {4 Q2150265921856
w) ]# j( u$ d" G5 r4 V[1, 2, 3, 4, 5, 6]
# U2 a. V$ V1 E5 R% T, P+ G8 X2150265921856
) K* E/ u0 c0 } t8 I
z9 l! J: |4 B6 B- a- m. ~ u
/ O8 ?2 M/ Q& D4 R5 T4、特殊的添加方式
; Y9 A# b$ B) Z) W配合算术「运算符」添加列表
* a9 }5 l; d: c; t' @6 E: I% K' ^; G! o! J- B! ?4 C' u9 O: q# U
list1 = [1, 2, 3]
) h& Y7 V* G! o6 F/ |; b7 f& O8 r: flist2 = [4, 5, 6] _; |9 F, @$ V
# f( L5 p/ R$ Flist1.extend(list2 * 2)" i* z/ ^* F% H
print(list1)
' o8 Y- T$ c3 Mlist1.extend(list1 + list2)0 ?2 [: Y! P9 c: ?
print(list1), r+ c$ [' A5 v! |, j- }5 K# [5 h
* f5 K' s+ B+ t输出:
7 O+ F7 i, a( F
+ U: s& d& H! k7 [2 y) ][1, 2, 3, 4, 5, 6, 4, 5, 6]5 c9 B0 s" |6 ` T
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]) G. q$ `9 g. R
1
3 t" c8 ]. |. P% A" ]24 X" V1 c* S' w3 T6 v
「索引」取值添加列表% w, C. |7 R6 X; K( R; v1 r
8 t' E) Z4 w' [. C5 A$ F* s1 h8 ~list1 = [1, 2, 3]2 G K) ^. y, k b
list2 = [4, 5, 6]
; r x) ?% u3 _6 d( l8 x
# F6 Q5 X" O" p9 s1 t' dlist1.extend(list2[1:2])0 z& F! B$ C9 b+ G- Z T. p
print(list1)
1 L1 {, P5 u. `+ o& e' K$ P0 j8 m1 j! T8 G+ c) w
输出:
' G" Y) L% ]# L
" H( y7 ?/ E7 d[1, 2, 3, 5]
! x# n! j+ [! D7 O
5 R+ g; I# F4 H) i' R& t6 B2 P
0 c# {: K2 Z) n
" ~4 q1 I0 t, s' K9 \6 T! \$ E |
zan
|