- 在线时间
- 472 小时
- 最后登录
- 2025-9-5
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7691 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2888
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1161
- 主题
- 1176
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解
0 V, u1 d w( i/ e- {! {1、可以接收的参数
. R. W% p1 h! C7 l: `1.1、添加字符串
- B8 j5 W" g3 N. j, p" Q1.2、添加元组. _$ {3 t& h, t- y/ K. @
1.3、添加字典" T8 ~8 `; q& C* }" ]) c. P
2、原理解析4 R; T" }; s7 i+ Y+ N! b! s
3、extend() 和 append()、+ 的区别?
9 |6 @7 G8 ~" m- k" S4、特殊的添加方式
; [- `: Z4 l5 mextend() 可以在列表末尾「添加」另一个「序列」中的值。9 ^8 }- o+ V/ r [- j7 t4 Y4 k# x
" Y X! Z% j0 |$ f& B$ e9 d5 M3 Y7 x语法% n( P# @# j3 F, p
f2 q- P" B% }$ O
list.extend( iterable )
0 `1 h/ g7 k2 S& `* G9 e
|4 K+ a0 l/ y0 z参数, ]+ h5 n) k! s$ @+ S
9 P% R$ h: n7 X6 [+ _ X3 v0 |iterable :需要添加的元素列表" m4 x. P* M0 a1 \+ J
返回值, o# D, K0 u4 ^! E& L/ d' k
" { h# \; T/ o+ Z) h, M! z# [
没有返回值,只是修改原来的列表
9 v: `* G+ R: U2 N. |( Z实例:向列表中添加另一个列表# i2 L' j7 s8 @$ U" t
. K! S3 F6 k) a% G. } }
list1 = [1, 2, 3]
: i3 T# N; g9 y/ o& Z. Glist2 = [4, 5, 6]
& b" P1 v" N' `5 A1 b. Y( U3 |# w& _3 I: F0 O: ?+ Q7 C
list1.extend(list2)
# i) }! Y0 {2 s9 m$ P4 ^print(list1)
x6 z# Z. B+ R
- ~ Z- n% {% H* T输出:
" I5 x: n9 y' e% U; Q3 D7 l3 s. x! c6 n3 |1 d" y
[1, 2, 3, 4, 5, 6]
6 p1 }. q) B1 z2 O) @( N) I* s/ q# H: ]' J: z' N
2 ]6 f& r6 @0 ?* J1、可以接收的参数
, p. N' y! ~5 w) n4 h6 kextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。: ~2 G& Y9 C! Y# [+ A, [6 z
7 H ^- _5 B* c3 R
/ @. W0 _- u# h% f8 T6 j
1.1、添加字符串
0 O, G% m, |, M2 lextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。/ x" n3 z: V/ v: c6 i6 M/ g
- {/ ] O+ ]2 M+ @1 A
list1 = [1, 2, 3]. e+ z: w7 H& w2 Y9 \$ }. L
str1 = 'abc'/ I+ }: j: r( T
( E4 C+ A5 Y5 U- Z! ~6 Y
list1.extend(str1)
$ s( g5 L+ B; Lprint(list1)
, k( ]6 H j# B/ |0 c# g- l( Y9 d$ N% g. |- X
输出:: _1 L( _& E1 e3 g0 p4 K- E5 }* Y
4 D e$ w: m! y3 X! K
[1, 2, 3, 'a', 'b', 'c']$ Z$ d2 i! w" M# f* X5 J
/ x4 }/ Z. `% U
/ I* B- A9 k+ v% h" v2 H1.2、添加元组" b# ^# F) C2 a, J2 b
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
6 f% V/ G( W5 e2 |5 Q/ O* e. i/ Z ?7 K' Y5 F
list1 = [1, 2, 3]
3 H4 Y* I5 Y f' U4 I6 c4 [tuple1 = (4, 5, 6)
' H/ l3 `5 F) v. e4 {$ ?. S( I' D! ^- d9 X- r% b# N, C
list1.extend(tuple1)) M, K; W& ^$ x" w& i
print(list1)
. s3 b! i8 d7 l: ~4 u9 U) N3 k
8 [" K) m$ s( |$ p5 X. P4 p) F输出:
. ^- B2 d) l- ~3 v% c
& S8 K6 w; q: U1 u; u) A: V2 |[1, 2, 3, 4, 5, 6]5 c3 T' V8 A( G4 }$ ~- j1 O8 X4 T* u2 d
. {8 I# i8 ]" f, I- Z$ G
4 B0 @; W+ O' C2 p7 M$ c% r# ~8 Q
1.3、添加字典! a! h3 C+ ~" j) N7 t2 W- V
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
$ k! o" x1 s8 S! N2 f
L8 J5 ?5 ]- B9 B. l' ?/ ~4 g: ~list1 = [1, 2, 3]" a- A" f" ^; {# q6 R% x
dict1 = {'key1': 1, 'key2': 2}2 ^ b2 t( Y* Q0 v
3 g* Q; D+ _% Z& @( {
list1.extend(dict1)
4 p- {0 V. p# L3 t9 }. Q0 W& r9 sprint(list1)
( \) ~$ A4 _7 g) B$ p% z# M7 k. P4 k& o
输出:8 d) x2 \' L4 c4 B( @, a" Z, X
& U f0 r, [- ]2 e
[1, 2, 3, 'key1', 'key2']
* N2 X) S9 O7 u' k& Z. x& {' k! u5 {/ [% ^/ ~8 S7 D+ T
" r2 V5 n% h3 t/ q$ b- m2、原理解析
5 T8 ~% U' D- ~extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
4 y# ]! x, K5 k! I2 L' `1 s8 D/ O8 O. f& |/ W4 T- Z
3 {% E+ G# e& Q, ?/ p
) f" T) ` ~: c% {- I8 R. Y
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。 D: E& y& s* k
! G' ^# Z0 r- j% } Blist1 = [1, 2, 3]
9 F/ Z% B, }+ ], c# l$ Blist2 = [4, 5, 6], A) Q# D2 m ?4 B
5 y% f" F( q. z l/ A$ _2 ~print(id(list1))
0 z9 A& J3 y, B1 ~6 o/ O' elist1.extend(list2)
4 e1 T# e/ N8 d j9 o% Uprint(id(list1))
" J, I7 O7 |: M$ Y: N& \5 b8 p2 p( S" ~* ~
输出:, r( a4 b$ ^: N I+ H8 h) e
' ]- e: V8 Z; G+ x
1930566508928 g0 Y9 _: t' S, b$ [+ J3 r; _' e
1930566508928
. O$ v) S5 A5 `) U* S" f. I% i; C4 T. @
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:. C4 h5 l6 v2 N9 S$ y: n
7 d; I% z' ]2 _
list1 = [1, 2, 3]0 N" ]4 i3 U/ h' w2 t/ J. Z0 c: q' F
str1 = 'abc'
# ]8 m9 S) N/ a f1 r: `6 Q) O6 l/ r% g& J+ V9 f. O
list2 = list(str1) W# z+ j( Z Y) d
print(list2)
& t( L q2 ^4 ~! ?; v: @list1.extend(list2)
" S) ~. a9 _ V. K7 w/ zprint(list1)$ g1 f7 Z! B I* S& G' n
6 n( `* `2 V9 c) m; ^输出:6 b2 l( P1 r; M. q
2 k: W% y; Y) A" ~4 e) M. [
['a', 'b', 'c']
8 M$ j4 N, t; L% b- n+ c[1, 2, 3, 'a', 'b', 'c']
/ n- p: U6 a2 i2 @0 w3 F2 Z9 n- s! z: V
2 t2 k; y. ~5 t i; h3 V) C3、extend() 和 append()、+ 的区别?
0 ^! D1 O# I% U以添加列表为例5 N; Z4 Y% m0 r1 ^$ r
0 Z' Z# Q3 N+ w: Q4 b
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
( h" ]% m' r9 `8 F$ z% w2 H1 K( P" ]2 x
list1 = [1, 2, 3]9 L B) V q% S0 F7 B* d
list2 = [4, 5, 6]
9 v+ \8 g; a. T H$ e2 _( t, t/ O# q
list1.extend(list2)- t+ G! B% K/ h; x0 H, n3 n6 k
print(list1)
5 k! W) N- w/ j6 m; `
& b6 J- F0 P( z( @( v输出:& X2 ^% n- O" P* m3 I
' P1 |6 I F: k+ L[1, 2, 3, 4, 5, 6]
" ~+ F' d6 b+ V+ u6 k& v4 Q2 f2 T) W- Y5 @ g, a- A6 V1 w* x
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中0 n8 B1 O, [ ]! [' ~8 o0 T/ L7 K
. }! j* P! E5 hlist1 = [1, 2, 3]
: y' s. e( k( z# K& m0 _* b7 Plist2 = [4, 5, 6]3 C$ _7 S* r( u+ E
( C4 M# Y3 l! F* Y. B. L) Z
list1.append(list2)
8 M3 `& k; U0 S# M/ ^) Sprint(list1)
- n$ z3 r3 l8 V$ Y) N# m4 P! Z8 i4 `* W$ W* H, h2 G
输出:; _. O, s7 U1 s
* B, @ e2 U" h[1, 2, 3, [4, 5, 6]]
5 x- O0 Q, f: H0 c5 i0 p
+ i+ [& h8 O- R1 C9 S+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
1 K) A( a* V. j' n9 G
+ ~+ z) t; W2 w! b2 |# B* q+ vlist1 = [1, 2, 3]2 t9 E" m1 Q' ?; q
list2 = [4, 5, 6]
- h1 ^0 `# b! Q' {, b4 Y8 | u
' V& W$ o5 d! n5 Y5 ~print(id(list1))
/ v" g) E+ ]! s# G! Gprint(id(list2))
5 {+ ^' G% g& A, C: \+ \3 x3 B Lprint(id(list1 + list2))1 A4 `% I. }: i V& i- i+ S
3 k7 c. k7 s( C q p/ j1 \
输出:
& I. W! V' b* ^. ~- Q) Y' a& O3 q. Q# B2 i( s
2680876376448, ]; ~- `5 M+ e9 r7 o
2680876376576
1 h Y6 F1 _' v2 ]" x2680878544128+ L- [4 P$ Y9 h8 a3 e
, j, w9 f# Z) L; _# {" x+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存0 N) X9 [8 {8 f+ S
% m7 l( |7 I5 y- Y- olist1 = [1, 2, 3]
+ T7 C% d9 e6 g' c. D. Elist2 = [4, 5, 6]
% {+ \5 g. j0 V8 Kprint(id(list1))4 n) o* B5 `% |! N: z
list1 += list23 K) E, c% X$ q" N4 Q
print(list1)- H. j; x) a% L
print(id(list1))
. }# X& a: V( p& D+ U
- a7 O, K* r# V输出:
8 _; z0 {/ j; t$ Y# O. l0 o5 O# K; _
21502659218564 b- q7 [2 G2 v- ^: q& D
[1, 2, 3, 4, 5, 6]
/ b, \8 n" h6 H7 p2150265921856( [4 z9 M, b: Z0 K7 l, G
/ c2 y# u, k! P3 y/ {
4 b, i$ K0 D ]$ C6 a; T4、特殊的添加方式
+ I( z- r! U7 H1 \- }配合算术「运算符」添加列表
' i. A( D+ B) t$ u# @; U W. ^/ v5 s+ H0 c
list1 = [1, 2, 3]
: O7 K; V) `5 ~9 l; h8 A/ ~4 ]7 z+ Plist2 = [4, 5, 6]" H+ @) f8 Q. h8 J% W
; S% x* S& f, P% J: t/ }' blist1.extend(list2 * 2)
3 X' X. k& \ X0 ?* d0 v5 d6 t! oprint(list1)& D; l2 g5 o: D( F c3 e
list1.extend(list1 + list2)8 G* f4 j* S1 b
print(list1)
# U/ c# [) ~* A! {, E
3 j+ _& z7 d* I$ n输出:
' l: F7 M- @/ h5 F, I
' @" f! j+ {: V6 B6 }4 i# K[1, 2, 3, 4, 5, 6, 4, 5, 6]& |8 A2 ] r' N, P' r
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]# I$ G- N3 ?% v6 U5 [
1
* ^5 ?3 ` B2 P4 c/ Y' }2! m' u- n" a: f# |- @. m6 v9 X
「索引」取值添加列表
, i) w( y9 p4 D. q) _
0 x0 F4 R% i) m/ z: {, {list1 = [1, 2, 3]
N6 I5 P4 a" @% A, ?list2 = [4, 5, 6]
. \- X1 g% ?6 P8 B3 G
: i; K3 }/ f# ?" H8 Z3 D% ^9 Flist1.extend(list2[1:2]): }8 v; z- G7 ]' v
print(list1)
. g+ T; Y' x0 A& F' s: o% @1 [! c2 H" ?; V4 [( ^
输出:( w h- }* v& T! Z% b2 [
6 l5 \$ Q8 q, M/ w[1, 2, 3, 5]; o+ o' h \" Y3 \
6 Q9 O6 E; z" K3 Q( Q% y4 |
. J$ ?( ~' _( w. R% K' c" e. U* _% C A2 h8 m! j% A$ y8 D# s
|
zan
|