在线时间 479 小时 最后登录 2026-4-13 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7789 点 威望 0 点 阅读权限 255 积分 2922 相册 0 日志 0 记录 0 帖子 1171 主题 1186 精华 0 分享 0 好友 1
该用户从未签到
extend函数使用详解
U- c- h3 f5 H# {% \# ` 1、可以接收的参数+ B, `2 u4 f- r8 j$ L* w4 s
1.1、添加字符串5 S4 i! p3 J0 j% q& }4 N5 G1 n
1.2、添加元组3 z! [& N4 M+ w4 @
1.3、添加字典
1 I) }+ x, C; V$ M0 p 2、原理解析
7 h0 y/ i2 ]( D: j5 d7 F! a, y9 h' ^ 3、extend() 和 append()、+ 的区别?
! F+ z: {3 l# n# b3 ~9 g& T 4、特殊的添加方式
; \( a8 J5 ]& u _8 ^; K extend() 可以在列表末尾「添加」另一个「序列」中的值。* e# A# I+ E+ B' G8 ]
, E7 k1 r9 k. p4 b/ p
语法
/ ]+ B+ }, F" B 0 J: E: A) P0 U2 e3 B
list.extend( iterable )( j# [, b$ j" F/ V+ @
! H+ {! `, m4 S 参数6 w- v, U H" `6 R' O; @
% Y6 ^2 ?2 B3 F4 U! ^3 ~ iterable :需要添加的元素列表5 l6 s- [6 t: K% M& W! ~, X2 Z. j
返回值2 d& C; W( n' ?! _
' g0 t7 X# `2 X9 L" f
没有返回值,只是修改原来的列表7 G0 V, d4 `% d5 A
实例:向列表中添加另一个列表/ g" D) w5 z) B$ [" Q) ] }; d
- u, B8 s( [4 K+ J. g/ E list1 = [1, 2, 3]$ h5 i3 U k) q8 S. m5 w4 B' w- H
list2 = [4, 5, 6]( ?* I" O8 w6 @. H
4 A& X" E! V: J \/ T% U
list1.extend(list2)
' E( F4 A! }& A/ g @; o print(list1)* `. b/ S: ~/ ` A: ]3 e! ~$ ~2 v
/ X: u8 D' f5 P( F; E 输出:
+ P, J" S, _# ~3 U! D, Z6 b ! }4 d& b& i2 W2 k, f
[1, 2, 3, 4, 5, 6]
2 j7 z9 p6 z- q- o% v " K* h7 E! q/ ] Q
( S- n9 D5 P! ^+ C* C 1、可以接收的参数5 J- Y! u5 @: a$ S# g: V( g
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
! c+ J" ` F4 J A9 R1 j1 o0 q2 g. j! S
% I8 z8 K9 S/ j" m 1.1、添加字符串
& |9 J4 j. R( W% u extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。! j5 ? @, h9 Y
2 l. V) q& F; `! h+ A# z list1 = [1, 2, 3]; V0 ^9 i( V* e- J& {. q
str1 = 'abc'
2 e) d- b: z0 @* o; R 3 W& G# ]/ W) S
list1.extend(str1) Y l# j. s* |$ J. b
print(list1)7 p% W1 i: m0 d" n$ @
$ g1 U% q4 O( W( v 输出:
8 [9 q$ u' X8 e5 X& Y0 ~; m
- Q9 v9 c( H& r) p( x8 T6 e [1, 2, 3, 'a', 'b', 'c']
9 Y# g& u5 Y( s- }4 K9 a ' @! t- z8 o& L% w! _' V2 o w: z7 w
0 K( M4 f& a' M; t4 n2 M 1.2、添加元组
: c$ f5 \9 R3 @+ ~0 A extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。; n! V" A8 I& X* p( y3 K- e
9 p' h# B& k: `8 V5 s V% F# T2 Y
list1 = [1, 2, 3]
1 x2 [" ?3 }. A9 |9 [, o8 } tuple1 = (4, 5, 6)+ V6 e$ k! S8 t
4 h9 e5 L$ }2 x) r
list1.extend(tuple1)
+ {% X. `- @6 E1 Q5 ]2 |( i( ~( G( e q print(list1): w9 x0 v1 W k# q. V
) j# F) m( o& b. K+ t$ G 输出:: x" k, ?+ S( C' z* O9 _0 R
. G3 c! I" n6 {! Z* Q; \ [1, 2, 3, 4, 5, 6]
/ f7 p0 ~& b# v/ ~
8 h8 I. y: e: H1 E4 j9 l! U$ | & d/ B6 p3 a# p# q7 s( j6 l
1.3、添加字典, s9 A2 o0 z. M4 @* e
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。3 A& l3 @! m5 m: |; f2 n( f! h& G
% g7 Z N$ P, P list1 = [1, 2, 3]
# H; X% r$ @0 x, l/ r7 ]8 E {5 B1 i dict1 = {'key1': 1, 'key2': 2}2 p* M5 ?" b+ p' [
( M3 u) I$ [! H1 p; Y9 I
list1.extend(dict1)5 U* E6 s8 ?" ]! Y7 {3 d4 |" D. S
print(list1)9 |, w2 P( K% k; Q/ }$ T
9 M% @. G% a0 F: J' }8 |! {
输出:
& U- r! y/ Q: { 1 u- M. U9 H1 E8 R: M; z3 w
[1, 2, 3, 'key1', 'key2']
# O: L( [- c. O2 Y% D
- [7 } _5 G' @, I8 r, l
+ y c6 C3 r% O7 W 2、原理解析
2 X3 w Z, {- y0 v extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。/ j7 D X9 K8 k6 Y. N
6 F+ {9 Q( S) f. H1 ?
1 R5 O, g8 a8 I+ G& V3 N E! n- J# g& x" o/ X
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。5 E4 B/ t0 s, |, h |/ S7 g
! N) s& c% H% _4 B8 f* S# ?- u
list1 = [1, 2, 3]" t& A( c8 N' Y
list2 = [4, 5, 6]& u: c) N5 A, p f1 E) ~
- Q. n9 f& D" q+ Q4 B2 p print(id(list1))
, L5 U4 s; U2 O) i" U list1.extend(list2)
1 h* I0 t. K a2 ? print(id(list1)), a6 q1 s! H) d2 O* U
5 U% z8 Z2 h) x( [ U 输出:! l* y$ v; h5 J1 m
9 v5 Q6 s) e, ~' F! R
1930566508928+ f' g$ ~, b8 M& `9 ^. A8 L
1930566508928
; H; B$ y7 f& H4 T2 {3 V( M2 Q
$ @, c8 d& d1 T2 [! v5 B extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:2 y ` \( E; J6 y$ g
) j* R, R9 r! p8 p# {$ a
list1 = [1, 2, 3]# }& p- C2 f3 N
str1 = 'abc'3 G- X5 ?% A8 @( V+ [ S
& k+ m( N9 M1 X6 I, d. } list2 = list(str1)
0 O6 e( t* i$ ~- U print(list2)- X' r8 q5 [4 k* r1 ?
list1.extend(list2)
5 W8 U- m& L5 k6 Y/ s! V$ R4 W print(list1)
6 G: l, F4 |- E
m3 R' G* |; C* ^ Y/ z 输出:
9 |# v6 H! f- H / z$ M M( V. s2 ^# j# g1 w; N
['a', 'b', 'c']
) O' T& ]5 c* s [1, 2, 3, 'a', 'b', 'c']" E4 E$ s; Q0 q8 K
6 C3 A7 n! d8 Z2 B- ]
1 h. T5 i+ V: e1 o. V 3、extend() 和 append()、+ 的区别?% A9 }' M' o M
以添加列表为例' N8 {( w% |" j% i! v# d
+ ?) `6 R+ z( p9 ~. Q" S$ h$ D extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
- _3 P* h" e% a' v& y % J9 C; u3 @$ d7 }6 ?, Y9 D, p
list1 = [1, 2, 3]
' ?5 A. M/ s V: u list2 = [4, 5, 6]8 Z* D2 z3 R L" [
0 n3 H0 J9 x+ z, T S
list1.extend(list2)% v5 D0 _ p0 ~2 b3 Z5 R8 T; D
print(list1)
# }/ m2 l; B9 M$ k7 d6 P
; z& a$ }- t6 j% [7 g 输出:( x/ J" Q2 s6 u2 x0 D
+ n) M6 }6 }! i7 R; F
[1, 2, 3, 4, 5, 6]
. D, h, e, G+ V5 H
8 `/ P) b- G0 C+ A append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中7 C! m- Z/ [& @* T
\6 Q- N N* b7 w
list1 = [1, 2, 3]' R H, k' @# J; y7 J. ]
list2 = [4, 5, 6]
* ~" a9 @% ]- r% b $ h. O& B6 S2 k! r# O
list1.append(list2)
; p5 Q \. y' d( p$ e print(list1) S% b/ A2 V, @0 G2 |) l8 i2 g
! p' T9 x$ G5 ]0 O1 Q
输出:- V3 ~8 h+ S+ o }( J8 t/ m+ j
5 _5 \7 c- r ~+ x/ R! n
[1, 2, 3, [4, 5, 6]]# t( Y! N% R S! C1 N, Y$ I
F+ K: ?$ |. y2 u9 {/ c + 会「拼接」元素,并创建一个新的列表存放,内存地址会改变5 k9 U' ]* A6 ^% d$ M& _
* A; u C" Z+ T, B' p! C list1 = [1, 2, 3]5 d: C& J* N& ^" Z# Y& R) _0 K x
list2 = [4, 5, 6]
( c0 z+ \+ f& k0 z! N, X2 A) I3 ^
- ?0 c& i: A8 P5 j5 e+ G print(id(list1))
5 F6 J" G, l5 c! v; n+ O% m% X print(id(list2))
! \' Z0 E4 l! N# t3 L$ e2 J7 t print(id(list1 + list2))
' a$ X7 @5 S, I8 a$ } # H$ t4 W- N7 W. _7 [. v, u2 }* T
输出:% b/ E! ]- L4 A+ n+ n# ?
4 j* {/ y0 r6 N- ^) g6 Z7 ? 2680876376448
( E/ N7 G. P0 ]7 M3 Z8 z, ]+ \2 ? 2680876376576) k7 W% z; w; R8 J+ F! E# t" O$ c
2680878544128, n3 @9 h8 D5 m# `7 o2 F
& q0 ?: N& P3 g9 `
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存: T$ ?( g1 }. ]; Q! U
. M$ V- M( X8 [; I3 [2 k9 a, s list1 = [1, 2, 3]7 t# U x3 r! Z
list2 = [4, 5, 6]
5 T" }+ \6 ^% J- B" { print(id(list1))
0 U% V# Q4 X# z# b" }% E list1 += list2. x$ {9 |' e, @1 w$ r
print(list1)
$ `1 Q# v. v; W8 ?& ]3 L( R print(id(list1))
2 N& f _5 h- l% m % @" K: }* K: H8 o
输出:
% J( z2 y$ g/ l
+ i7 Y) S4 O2 |! b8 u 2150265921856
3 ]- K) m+ A9 s% F, t [1, 2, 3, 4, 5, 6]
4 w2 T( [. Q% u. B- ], W- b) P 2150265921856# o3 X9 c/ B/ I T9 j T
3 w9 n7 B2 ~8 R) w
7 R, U" m5 Q) D 4、特殊的添加方式
# v) B4 o& m+ @, q, z 配合算术「运算符」添加列表
: _4 S1 c4 Z# q# |" c$ g1 L0 V 9 U6 h5 H3 P, l: V, Y4 H, N
list1 = [1, 2, 3]
6 G7 n' P7 U2 ]% F! V list2 = [4, 5, 6]* s8 ?; L3 {1 u, H
2 z: e0 ]3 x2 J# K5 l: l
list1.extend(list2 * 2)% R5 f) a6 u9 a5 [
print(list1)
3 J7 ^; B3 t- ? Q0 @( m' T7 j/ i' Z list1.extend(list1 + list2)
S' ~& Q6 f( U: [ print(list1)
( Y# x) x/ D0 P7 h& Y" M( i
; e9 h2 Q* O: I; Y* Q4 V 输出:9 Z! r5 S7 j3 J$ w' }
* s/ |! R; i& Q# V8 S }" S# W! ]' n [1, 2, 3, 4, 5, 6, 4, 5, 6]
4 ^. }* y" r0 Y- A [1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]6 {4 r8 Q6 B3 {: Y4 A5 F
1
+ J! t* {+ B" N7 }% H) |" \3 i5 J# g 2
- l- g9 ], p3 P9 L 「索引」取值添加列表/ B) I% j5 m, M
1 A' F1 P. N8 u list1 = [1, 2, 3]4 X. b6 U. i7 w3 v/ y* _9 z0 q7 b
list2 = [4, 5, 6]7 \& K' [ m" f, V1 V+ T$ M+ H( C
, [5 c6 m! Q9 i @# h$ N: K1 i
list1.extend(list2[1:2])
5 F+ h8 y* c9 x' e print(list1)5 a6 J j7 Y+ a7 h b" A/ |
$ w) J0 T, p X5 L& c# I1 O! q( t
输出:
- s9 H# o' a2 v. {- B
# q& b" D( S8 E6 ?- ` p [1, 2, 3, 5]$ S: ]0 U+ t, M. b3 ~* q
* j- H% Q' i7 \# g* v- K# l, \2 A 1 c4 C) N1 S1 Y' ~
/ g# K- \5 A) \) v0 w
zan