- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解+ v6 v8 J! g/ I# h2 T* q# l
1、可以接收的参数1 i8 u# K$ l- ?( E; z( P
1.1、添加字符串
o+ h/ ?, @5 s. e2 S2 H, u, l1.2、添加元组! P# Q( Y; N4 Z7 I& N
1.3、添加字典
& y0 r- u1 _& @# W8 ]/ g+ B2、原理解析
& ^1 D, G2 T- {1 r$ ]3、extend() 和 append()、+ 的区别?
. |! G& ^$ T/ u& _4、特殊的添加方式
& V$ `3 b. y6 T4 k fextend() 可以在列表末尾「添加」另一个「序列」中的值。) D K% \- K5 w$ X
* J3 e& N9 a+ \: N2 V
语法8 _% Y9 p2 y! s
, T% q5 h1 x% g' Glist.extend( iterable )& d; r1 Z8 r1 W: `! L# K
% q4 i- ?" Q! c参数2 w5 ~; }. ^( n1 _1 I6 V) ^
4 t) \. B. O, X4 g
iterable :需要添加的元素列表
3 \+ |) p+ S1 w- x0 S* f! S* {% B返回值
- [% G3 d( T9 \$ `; b, v6 J
7 j2 y, h9 r) J& \- n. u, b. m没有返回值,只是修改原来的列表
! j# p" t2 J& ?9 e- G' C实例:向列表中添加另一个列表
- M2 L0 T0 V3 S. O& w& C3 z- ^
L7 y6 H" R! i, H6 P% ]/ @+ y( Zlist1 = [1, 2, 3]
6 ^1 ]6 |9 A/ |% E( Zlist2 = [4, 5, 6]
8 X) y. F% u/ h( P( J' Q1 W
% ]$ h1 g, o3 S6 k/ i/ L& j- Tlist1.extend(list2)6 F8 j# j" \& A0 z$ F6 }* \
print(list1)
/ B p) i1 F, D( ?8 a& U2 v X/ e" w& C
输出:$ k' t0 C$ n) {" x) X
; e" V% U$ g" G- F9 q! [/ L8 C+ e[1, 2, 3, 4, 5, 6]
' ~8 \( }( X' r( Z7 r. c% v& V5 z+ T- o& A( ~; Y& v+ n
! ]$ i K+ [7 s/ D5 C1 s/ v
1、可以接收的参数, H" e1 U& ~/ V" }% \
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
4 F* }6 O+ x8 K3 w. }, J3 O3 V3 [$ H# W4 ]+ E/ v. ~
% y5 c) W0 i# t5 T6 k7 v1.1、添加字符串
+ T9 c- C1 g3 b. I' Pextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
' M$ R( P" s1 f; w* a
/ D' l" k1 c+ F7 a, {# Qlist1 = [1, 2, 3]2 q1 ~0 _; W6 T1 ?1 } [
str1 = 'abc'
* y5 M* T9 V8 G2 H# i$ u, I
; y! q$ v0 b3 i" N7 S7 ?5 s! N* rlist1.extend(str1)
* [& k% x; k. {print(list1)" F% {4 G4 I* Z* c. T6 s& Z( R
3 }: Y! N/ m; n4 C1 h输出:; U) B$ r) T7 c8 x
$ g9 y) {' k/ Q& C, K8 B, H# a
[1, 2, 3, 'a', 'b', 'c']
& m- e: `- @- q5 f5 I% l9 x
# v2 M. Y' u. M% {5 ~# I7 n. k0 Y% `
1.2、添加元组
8 A1 n* D" _. m# a9 y" Bextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
5 {% R' G. X: l; E0 Y0 _ k! z, k# m2 U( c
list1 = [1, 2, 3]
" h- d& r. G4 f' o/ r" ytuple1 = (4, 5, 6)9 {, M3 v0 x+ p" R2 @. } c4 ?
3 W A9 M" X/ G$ s. m
list1.extend(tuple1)7 B+ {3 ]) S8 n: n$ \
print(list1)6 h9 y, j5 |8 w7 I
! X2 j: Z ~) n1 j h输出:
r3 b7 _; N7 R# i8 ]5 O
2 b4 f( |* e, i5 @4 o+ k9 K[1, 2, 3, 4, 5, 6]. A% q' o# `+ f
+ P8 y$ C% S; d3 N+ Y& d! [8 [- H: X( g, I5 d2 a2 |
1.3、添加字典) H' k; ]0 U# b: J
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。& k6 f' ?! M) G+ g
4 S6 D7 x9 [% s9 |0 p5 y0 dlist1 = [1, 2, 3]! H9 l. t8 O/ n9 c d3 R
dict1 = {'key1': 1, 'key2': 2}
) K$ D/ O5 N4 e" c. ~: }& u" e8 `& s) K9 p F
list1.extend(dict1)
( F0 y' C: r" W, z2 xprint(list1)
' A6 L% K" Q* _% f" P+ |3 o2 k- U; F7 x, A0 |+ s t' L
输出:0 [* M+ H# R5 Q8 ]
4 z3 L- k5 r2 M6 v7 F. [6 f[1, 2, 3, 'key1', 'key2']# g% z2 f) J& ~* _0 a9 Y& D
4 f# r4 w* q4 B( R
8 s2 K+ n. [; @# S Q( M
2、原理解析
. G$ P; B9 t9 P: [: Q3 U3 A, V; P3 [: rextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
@4 |0 H* Q5 A, p# U
. C2 {0 _3 z8 h0 ?3 G
6 I( V6 A) W6 S0 x+ y) v: x. ~+ i$ e0 z) O
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。- ^7 i& l8 z' f
1 F5 t+ Z4 A1 p0 @: blist1 = [1, 2, 3]
, `: j. f. t% H! \3 ?" ]# F- q# w; ^list2 = [4, 5, 6]
- j2 T' L, a, F
2 J. P g& a V( L8 p. M' aprint(id(list1))( ~1 I6 Y- g$ e' e
list1.extend(list2) S9 S7 H0 c9 F- Z
print(id(list1)); }* j( I Z) R8 b) I- h0 F" |/ k
; E' G/ C+ ]- }; B9 A4 b' e
输出:
1 ~6 T" y) M- q$ F5 ]/ t0 _0 V8 u7 h1 g# e" O7 d
1930566508928
: M# Q W, U$ d& r2 h ~6 n6 J1930566508928; o; M W3 A0 R8 p$ u2 X
( F* f o* v1 y6 v6 xextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
8 D+ O6 q7 a; W2 V; w8 M
' Z0 E. L# C- q" Zlist1 = [1, 2, 3]
; J; w9 t1 E$ U+ X, J- Rstr1 = 'abc'! X! r" [/ w, f8 l. {' b# |
2 y) h7 S& B! s0 x9 W* W; A) ~2 Ulist2 = list(str1)
: t$ C" l2 `) {& j. A/ Pprint(list2)1 B6 {+ N$ t% U. c5 ?3 ]; X
list1.extend(list2), i& P0 v |5 ~" T3 y. ?) @2 U
print(list1)1 v: B/ u" M i
. Y1 Z5 g4 x: ?1 q
输出:0 O) m+ u" C; @4 C
0 E9 `& P) b* D# _/ Q
['a', 'b', 'c']1 d8 O, N' V4 q; \- ]1 d6 f
[1, 2, 3, 'a', 'b', 'c']2 |+ i5 V' B; t0 D- \) [( U
8 L% U- b! T* y" l! l. `
& w l/ i' W9 A" @. T t, x1 f' X$ I3、extend() 和 append()、+ 的区别?
' }( u2 h5 P9 _$ m# A7 J以添加列表为例
* P9 _( P: g( z* s7 t7 z$ m4 h' g. t" U. h9 n
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中. A3 u( X7 M$ E) x0 ~. b3 u
/ Q: A: F2 E3 Q! A% |list1 = [1, 2, 3]6 M4 m, ]) P0 s* F7 w' r% P
list2 = [4, 5, 6], a4 I7 o1 @3 Q
5 ?- l+ h1 l. w0 w
list1.extend(list2)
9 i9 p8 ]9 w9 ]$ ~0 r! Y6 ?5 m- uprint(list1)- h* F* J7 }( f ~7 w
g* ~* B5 x3 C- f& E5 y* [
输出:
$ h+ r8 f3 Q9 g; q- Z6 Y3 ?& W4 a1 K8 N4 R/ B
[1, 2, 3, 4, 5, 6]
. [+ Z6 M. b) A# N' S$ m! c" i+ `5 H$ ?$ Z4 J- x( [" O$ J m. I- m
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
! G/ O6 X" _3 ~5 T9 S6 M1 j" p% o9 }! N
list1 = [1, 2, 3]
1 ?% N( T% S( Y7 X$ O, B. s2 ]3 ilist2 = [4, 5, 6]
9 A* w O" z% U: V. T: S; z. i! k
! g0 _0 U) k, L& u) Wlist1.append(list2)
X. }" e- m( E' b" D6 [- |print(list1)
; S. y# c+ v0 v% T/ S
8 |: }, l! v# D$ \" }3 @/ x& D输出:
5 M8 _- S6 u( @: [& J$ j# O$ k1 b T5 u! _1 o
[1, 2, 3, [4, 5, 6]]5 b% z8 k1 s9 x% w8 x
0 v- P+ P$ T) B( U1 g+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变* ~1 d- m1 ?) Y/ b: i9 c9 d
6 x7 W$ R) _2 K, C3 B6 \; e7 jlist1 = [1, 2, 3]
0 Z+ _/ x5 o+ N7 Llist2 = [4, 5, 6]( Y: d ?6 V" A. I7 Y6 |. k5 L
' \( Q$ J2 d `+ ?. W2 G8 Lprint(id(list1))/ P9 V- @7 r( m, _
print(id(list2))
/ \; M9 @+ Y2 R4 b1 q% Nprint(id(list1 + list2))
2 k) ^, z" _' @( U# d9 t
& @6 A, i* o0 y/ o1 x# ^- C输出:! v0 E, c8 G5 H" W; M1 U4 ^! K
; k5 a! K# p% i( ~/ e2680876376448
1 _$ D% i+ J$ r) I1 j% r2680876376576
( \5 Y% S' X# C3 A/ F26808785441287 ^- M% ~9 h, F# T V
$ ?* r* w6 f/ _/ a* h% U4 _+ B+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
9 `$ |; ?# q8 H/ i. Z3 T2 Y6 A9 I0 }$ E+ G) \( |
list1 = [1, 2, 3]$ N( H; M: _$ b9 N/ L* @3 e& d; Y6 O" l
list2 = [4, 5, 6]
9 ?/ ~/ T* |4 E1 s* iprint(id(list1))
/ S0 [/ l( @; z9 ? Zlist1 += list2
2 ]- K3 M) t9 Zprint(list1)
2 D7 t- v2 J q2 @0 R) Wprint(id(list1))9 f5 i- J( p, A4 E; _2 X1 K/ a
' L _9 _: Q9 I1 ]0 `2 q ^& O
输出:, s7 i! G; r, K/ k7 v7 b. l7 X& V
9 s) W% S3 \3 e! z% _0 }21502659218567 @* J+ @! Z+ m! h9 L* Z; V
[1, 2, 3, 4, 5, 6]9 ]/ y% Z X8 \
2150265921856: P+ l! p3 M E E6 A5 e" T
) _7 Q) _) h% y+ r R
4 z% c! b& C' _ p
4、特殊的添加方式
. F/ t4 E& j4 f配合算术「运算符」添加列表2 U3 |1 d) g0 H
3 e- i) h( G y6 x7 Mlist1 = [1, 2, 3]
2 ] o1 y7 v/ K6 I: {' Xlist2 = [4, 5, 6]' e; F" Q R. q( g* d
/ H+ g" W/ E1 I: o6 J' @+ w3 |list1.extend(list2 * 2)
6 `& X, w2 c$ z& f2 L& Q7 ?8 Wprint(list1)
G) {" T' B. `0 wlist1.extend(list1 + list2)# H( }, i( N8 k- ?3 ~9 ?5 ]; u& J- X
print(list1)
& y, _! Y+ a* F7 Y
- X: g! A( P9 @输出:
9 }# O1 n0 p- ~7 L# [ H
+ R, L. w3 _ e( M( i[1, 2, 3, 4, 5, 6, 4, 5, 6]* d y3 r0 P2 R# s' o8 Q
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
6 F' V' W" r8 u10 j1 k1 D$ f( ]6 _2 ^% p3 k
2
% E+ u. I, \% ^) B6 R「索引」取值添加列表 @" ~9 {/ A; z( V8 J$ _( X
2 M; W6 K2 T3 K; Plist1 = [1, 2, 3]* H& n& o \9 X. e3 k; W; i
list2 = [4, 5, 6]) z( j p: a( m$ K2 q$ ?
* r/ ?8 x5 I; O- e, olist1.extend(list2[1:2])1 K& Y4 d+ N; i* D
print(list1)5 _+ A) o% }8 s0 X0 N' w7 z& w
- D' B- u2 Z; m+ A
输出:
) e) z6 T# W" _# W8 J) f0 R5 [+ H& p: p) m" B
[1, 2, 3, 5]! v2 E# y" N/ B3 Q
) Y! o( K4 o, x. [( \6 {# g, s4 q( o- j2 `+ \- a3 y
& i5 z- n2 C# M1 j0 c |
zan
|