- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解
- K- Q7 k9 X3 j. r, \" E$ R8 a. X1、可以接收的参数
1 v1 O* s0 b. a# {, P/ V! i1.1、添加字符串
+ |5 s" k6 R7 E1.2、添加元组+ T# p7 y, \3 q0 H) S0 X0 a
1.3、添加字典' ?8 N2 X) w) b0 M9 r+ T$ d3 H
2、原理解析/ f7 E" N* b- [" M R
3、extend() 和 append()、+ 的区别?, A$ m$ t+ K' A3 P- S
4、特殊的添加方式
% h+ f Z0 V" H# x. L( Q& [extend() 可以在列表末尾「添加」另一个「序列」中的值。5 b: r* e. \) |. F
; D& w- `1 w j p p语法
& L' ^" D" j L. @# s4 Y; m$ S" \/ j
list.extend( iterable )6 L. i0 a) S3 ~* r2 M2 S- e" o+ V
$ D# \# F( R, t7 v. |4 c" C
参数
& }" Q+ `$ M7 B9 y2 Q7 \4 w3 M+ v- b
iterable :需要添加的元素列表
; H' ?2 F5 B) s4 v返回值/ I2 p9 `, u& G& T: Z5 J
) |5 l# k5 Z# k; n没有返回值,只是修改原来的列表 V3 H( B/ x' v8 W6 ?: J
实例:向列表中添加另一个列表; c2 T8 m7 P% z% B2 R- A
* m) C% ?9 `& `% P" g' llist1 = [1, 2, 3]
1 f- H" L9 U( Z" l" }1 V8 s3 X! c! n& {list2 = [4, 5, 6]/ Z" _8 d) k D1 e0 ^( K% n! @0 K, t
+ a, H5 x8 w( r+ [3 y0 Olist1.extend(list2)# m4 l) J8 D: s) L* P% S+ m
print(list1)# n% T% o, x( f" `8 w/ V
4 {$ ]' y. C7 I' h/ N" x7 H1 \ U2 d' P( k
输出:
3 M. I# ?( ?; u" v& ^7 J7 B) @$ e& O
7 _- O2 F( h. d, I[1, 2, 3, 4, 5, 6]2 S2 v. v5 }. h$ S; H4 j
- u" C" e/ K, F9 C
3 y! k2 t/ ?& p: @* o0 b3 |) B
1、可以接收的参数6 R$ ?" O; a& N4 m0 H+ r' \# ^1 L
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。1 d R: V5 Q1 G# I# r3 W6 t
: `) Z: o) R% @1 v
, y" @! g/ w# i- Z/ j* y. V! t
1.1、添加字符串
0 y) E% h, b% i* r: k) oextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。8 M7 ]. q$ T+ T* V* W
' C4 p$ K+ a/ o* s+ Vlist1 = [1, 2, 3]! \: c \9 s6 N3 ?# X
str1 = 'abc'4 D! V" N) U) l5 A
- V! Y! M6 T' h* hlist1.extend(str1)
( n2 Q6 K9 E; Z& v* C1 T- ~+ { X2 j# \' tprint(list1)9 L1 I+ c; a" l7 B
7 Z& ]4 ?% C! W/ h
输出:
2 a8 G; I$ g1 M3 |5 n
c& a S8 ]. r5 {( `. I[1, 2, 3, 'a', 'b', 'c']
* n, T2 e: L' \
0 [ v4 w7 E2 ^- w
+ D6 z7 r! V& `7 F" I1.2、添加元组/ {) d. g7 ~' N! j6 e8 j) l4 ~
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。: Z v. P8 s2 N6 X1 T# j
* W& t! E7 M# ~7 A4 y! w
list1 = [1, 2, 3]! E( k! b/ }% l8 \$ d h
tuple1 = (4, 5, 6)9 I1 k' y c+ q: m; ~& j$ Y5 |( _
( M) G. O1 @2 S6 `" Dlist1.extend(tuple1)( K# V% ]1 O+ t- t2 e9 y0 u
print(list1)! U7 { p" Z9 @+ y3 f% Z2 w
) S. w0 n; w P X0 k5 L% y
输出:
' C6 y" ]0 b, s/ @# W. O- j G* y7 q$ O$ s
[1, 2, 3, 4, 5, 6]3 a8 q& `4 G8 r* q
+ ~9 _& w/ d% Y
) t; |5 [. a/ O
1.3、添加字典0 W5 a+ t$ T" u) @
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。# E; |$ d; M/ S, e0 A
6 i9 ]' G, z5 D% R) Z
list1 = [1, 2, 3]: Z: T2 ]7 D6 b. w Z8 D! \
dict1 = {'key1': 1, 'key2': 2}% y9 w" P( l7 a
9 Q; s) v2 H) \9 p# x; alist1.extend(dict1)3 z4 E* f0 q& ^4 b9 x q% j
print(list1)
. ?% a; [# h, Q* V5 q1 R
, Z6 C- b# K" S% C' [输出:
. a$ W$ m! l, |. Q6 t9 A/ F8 q9 V( r; Q8 K4 m! |; y# g' b
[1, 2, 3, 'key1', 'key2'], C, w- ~: P' O& u
! ]1 @3 L3 V& M
! R. o; c5 g3 Z$ h8 C r
2、原理解析
) M" Q2 H e# N" }4 d& G8 ]extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。( L7 [( z! _, O$ ]+ ^$ p' `
4 S! M; m, _) }# r+ Y3 [8 _" t1 L" p0 I5 O9 u# V
, U& \5 K5 q( y. I% X, ]" U' }我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。% e" p/ U' f/ b
. @, u% I$ D% R2 A& [/ n
list1 = [1, 2, 3]. {. V2 H, h L0 [& u3 B3 @
list2 = [4, 5, 6]
; U) R5 X1 ~2 _8 g+ l
) |9 t' _9 q; p. @7 hprint(id(list1))- f/ J! \, ^% P1 [9 R
list1.extend(list2)5 |, K) q) I4 J0 e
print(id(list1))" i+ g: g1 O5 b* H' v8 ~8 ~; @
& v$ L# ^2 F8 @8 v输出:: l |( \$ v C$ L
9 g7 L+ h% Z& d1930566508928
" m; h5 n6 x/ K9 ^; s7 L3 k1930566508928
, o1 f/ c6 T$ A* R5 A, O
+ d4 z' z* J8 R1 k* |% fextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:8 a9 W1 ^) J2 G/ d* h
^! e% m' ~$ l' N3 d+ E# Ylist1 = [1, 2, 3]
W; n5 g, {4 T! z) i5 |str1 = 'abc'
6 m; Y& g9 F( d4 x! E& P/ o3 T* l3 Q: C& j5 C" W# z
list2 = list(str1)
" R! [! X$ v) P, H+ pprint(list2)
6 o1 l& R9 L0 e4 Clist1.extend(list2)
3 H; t* W( s4 ?) S+ }; _print(list1)
" B v% {3 X+ b0 t5 a$ b& W! S6 \' o% f
输出:
+ ?6 F; Y% X0 E: q2 G0 Q: s. k" o* E& X
['a', 'b', 'c']
- E7 ~! d+ m6 j3 k! d[1, 2, 3, 'a', 'b', 'c']
2 y& F, A: U9 h8 D
- q- `% n2 n: p$ Z! Z. n5 k
. v+ T! d1 u6 i _& E3、extend() 和 append()、+ 的区别?
2 I" ^$ z5 d0 g) b% q/ K0 y以添加列表为例' _7 {' }- X. ` b
9 G3 l/ T' }6 t7 }extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
7 v- O5 b! \2 [2 b Q& P' G; T) G! M& O) w) T
list1 = [1, 2, 3]5 ]& H5 u, C: K8 v
list2 = [4, 5, 6]
) D6 H$ `, p8 E7 K& R8 m7 b9 c7 c- ]
list1.extend(list2)
* C. J' v: j% w+ xprint(list1)" M" }: M2 H# a
' V2 u. H6 v/ X
输出:* ^8 e/ D: S, `- M) y$ ?1 r- V
9 P+ O+ U. r K. F! W[1, 2, 3, 4, 5, 6]5 x% m. C0 [1 \4 a/ I2 r; ]
/ C- t5 N( `0 _9 b9 p0 zappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
1 O9 O) b4 `+ |- h: n7 l
5 E1 c; g; Q* K. k3 H/ n5 Glist1 = [1, 2, 3]
$ v6 P' R8 e& w: |3 m2 n0 ]* elist2 = [4, 5, 6]
# y) \) v$ l* x) ~: D" K+ X) k3 c& ?% [3 I/ K9 y9 _+ R
list1.append(list2)
# r* h/ p# [( p' @4 p: Pprint(list1)
# N. i( E4 A( M& U3 R! K
( C+ ^8 ?1 b8 M) {输出:" K4 _9 T: s) p y! X
9 C3 E% z7 W4 B[1, 2, 3, [4, 5, 6]]
9 C- Y* c! P7 e! k
& ^, D* \2 m; C+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变, c K# F2 }, w. ]8 n1 I# i* `8 Q
. E/ @* k/ _. z+ S: Wlist1 = [1, 2, 3]
3 H% L) L/ V. E6 F* O9 ^list2 = [4, 5, 6]
$ O. @$ U$ [( [! g8 X
* ~0 U8 X% N" s0 o! j: xprint(id(list1))! J' n, d+ a) S7 u
print(id(list2))' a- J. Q. f/ R: L, T
print(id(list1 + list2))
- h4 A0 O3 s8 v$ f
& ?' E- Q, }+ _4 L输出:
6 ^6 q3 L. |1 i: `7 }+ o5 C! n0 U+ G
, I$ L4 E$ u; ?/ E& o2680876376448# i9 [$ w4 H& V) E- x4 n! z
2680876376576+ ^. t4 a+ \' l j; ? h
2680878544128
2 `' m, F1 ?$ p; L+ m, S. t6 p1 |+ i3 l; r' U* q
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
- z$ [$ s3 [" S, u1 V
2 h, J1 F! y9 `% u2 z' blist1 = [1, 2, 3]
( U$ U6 D# R4 o) O( o& Olist2 = [4, 5, 6]
3 D. z# M) \7 [9 M/ Pprint(id(list1))
( S8 e$ B/ w% E4 y, U8 ulist1 += list2: a% O5 a. w H
print(list1)" {! } z$ l% B1 R3 N
print(id(list1))
. N6 ^- s! w: h% M( z8 d6 t! f3 I! w( y& [ \% M
输出:$ A! E3 Z3 X: }
7 ?6 P9 o, E7 S- ^3 C0 R6 @2150265921856
4 `% k! K2 J& V[1, 2, 3, 4, 5, 6]5 v1 I- u! n7 ~- O# B
2150265921856 T; r! v" z+ L
$ ]; ~% q' f8 x" `- F' V5 A1 N7 j- L) X- H0 B
4、特殊的添加方式
8 Q% ?. S: K! n( r2 M配合算术「运算符」添加列表
- H9 I/ H2 t$ f/ u
# \$ u$ S( a9 ulist1 = [1, 2, 3]
5 B. z8 f9 y% X% V; dlist2 = [4, 5, 6]
j( E6 Q" ]* i
7 A4 o: g0 [8 l7 }, zlist1.extend(list2 * 2)
0 x9 K* n. t* e0 X3 x: H! Sprint(list1)
) \1 f* _8 T1 P2 ulist1.extend(list1 + list2)
. ?8 W ^- H8 Q3 R# h. g* ]print(list1)
1 x6 h) s& M0 p _4 t
- I5 s0 \0 @8 p' N输出:& G6 @' Y! n$ i; v* v, \0 C z/ v
+ F# S0 E' Q: y$ U) d$ @
[1, 2, 3, 4, 5, 6, 4, 5, 6]+ n" b/ r9 d- E" g
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]1 ^; l: e( A! Q
1+ F! a3 f, Y$ z6 {1 [
21 j9 |& H! H/ g; M0 a
「索引」取值添加列表
3 F' w8 W! b2 k9 e% l
8 l5 t3 m- U- v) klist1 = [1, 2, 3]2 x2 G: h# \" v# h# ~
list2 = [4, 5, 6]
- S3 }. ^( {- O+ e. X2 e+ q
9 s; z! m# [7 A9 E: y% tlist1.extend(list2[1:2])' }6 I O6 S) j2 G# o; @
print(list1)
4 B" N% g* m& H: \
, F/ G/ ~7 {) G0 e( j, L输出:
: f1 s* w& y7 f
5 F* N+ u+ M: p[1, 2, 3, 5]- E6 }7 W# O7 c8 n/ V
0 u& Y6 }8 s9 L& Y/ G, ~' u1 \9 _) j7 b9 A5 I
- H4 I: H5 e% ? F2 d5 t
|
zan
|