在线时间 478 小时 最后登录 2026-4-9 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7788 点 威望 0 点 阅读权限 255 积分 2922 相册 0 日志 0 记录 0 帖子 1171 主题 1186 精华 0 分享 0 好友 1
该用户从未签到
extend函数使用详解0 Q3 Q! m( z5 h h4 X* G; [( |7 |
1、可以接收的参数
' ` _2 c2 V; ~; x2 t 1.1、添加字符串
. @! S. v0 q; Y! _# c7 }; a 1.2、添加元组6 k1 e& M# P: U6 O+ K
1.3、添加字典& i6 y$ o2 b6 w
2、原理解析' e3 s0 E+ G9 j: R& M( u3 r
3、extend() 和 append()、+ 的区别?- g" m" x1 u4 M5 ?8 {+ k
4、特殊的添加方式
5 Z! }) |9 x6 x: s! I extend() 可以在列表末尾「添加」另一个「序列」中的值。
) H- D" }) w' s4 M
8 a6 Y u" R9 h! t! ^! R 语法
" V3 Z& b9 o; [! i$ x( P ( R/ f- A5 b* `8 y0 w6 A
list.extend( iterable ) |, B: C- S( ?, Y9 T* A
( U& v. _+ g( f( j; W& w 参数
. G3 U. o/ s1 K7 m$ F( _
4 E( `. O; v4 x) ] P4 K6 y8 a& n iterable :需要添加的元素列表$ W1 `" f/ P9 `$ f) A
返回值
4 f; S, D) S$ Q
0 @2 a% ?8 r% p; N6 q 没有返回值,只是修改原来的列表5 }- }( b+ {7 V( r
实例:向列表中添加另一个列表& g3 R' m* P# Q* m$ y
- h7 j* Z9 q8 h6 t% f7 J- P' b- p
list1 = [1, 2, 3]
1 J4 B* n5 I5 \! S/ L% ? list2 = [4, 5, 6]
8 o! E5 v: [% W' }( c; `- F) w" P
0 ^! H0 ~! T, ~0 B list1.extend(list2)
7 o4 F/ M. u6 t" f8 ^& a: h% I print(list1) l( A I' v4 ^' y
! _: |6 \ P- n! f5 u
输出:
7 x% M) t, L* f3 l9 ` 7 R* \ ]$ b* B) K! z
[1, 2, 3, 4, 5, 6]
4 O$ D: {; s& v 3 B* h- n& V) ]0 ]
; G7 p: N7 `* M! l& {1 d 1、可以接收的参数
Z2 I+ m+ Q7 H9 J/ B, r extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。8 y/ q5 e( A! k! k! `. o! O6 H( {
$ B! d, O& S& M9 d & |* _2 [) q, a5 Y ^
1.1、添加字符串
6 ^, y4 x2 o. P! O" H extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
/ W% `+ z/ M7 a, \/ ]* l) G
n7 `0 q2 D c# |+ \" F list1 = [1, 2, 3]$ j. ?* ]- R m2 U @5 k& d: e
str1 = 'abc'1 F# H# p; I: X. b% x, X
8 f8 J; m4 |! E9 l" f list1.extend(str1)
" A. M( r' @; H/ A _$ Z9 X% p print(list1)
# U# {" P1 J5 q, H1 F
5 @0 ]8 Q9 C) ^ 输出:# i7 b3 A$ f0 q" E0 X" z
) B4 s$ N; u" |# l/ c [1, 2, 3, 'a', 'b', 'c']
, M7 j! [ y9 l$ u
5 y( o$ S# b) n4 l t$ A$ x % _$ g( r( B" c& I
1.2、添加元组- e1 q0 w: O" J" t. @+ C
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
" f/ M9 e3 L/ k; d, c
6 g. H3 f/ c. f R) M9 T/ ] list1 = [1, 2, 3]; U0 R b- |5 s: M/ z
tuple1 = (4, 5, 6)0 @* Q! v% Z, M: j' U
, i h; [$ x/ D' S3 `
list1.extend(tuple1)
$ Y4 z* O @8 | print(list1)) G) Z9 |0 k, s+ e' `
* R1 J: }- e( E' V' p, ?4 R! Y
输出:
, L; I8 t+ m2 L. b a: T. Y
4 {8 ^! T6 ?( [' D4 f/ g$ M T [1, 2, 3, 4, 5, 6]
/ `# |6 r- V B' [4 I 0 z1 N$ f$ |/ Y: E( g4 w! g
+ e1 g+ @+ i6 t7 ~8 m9 Q
1.3、添加字典- t% x Y; t4 L9 n4 S
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
; Z6 F" k5 f1 v! Y! s ; F" p6 W5 M/ t8 N# r2 f
list1 = [1, 2, 3]! `! b4 w: V2 j, N, Q: i
dict1 = {'key1': 1, 'key2': 2}* `9 @: z( o9 p9 h V+ T- w
+ ?' F5 l) F; B% j4 G
list1.extend(dict1)9 A- T: _. r ?
print(list1)
& F2 Z' ^1 g6 F. \
- D* Y$ L6 R3 E 输出:4 h) d& I+ O$ m
2 O. I) ^* j6 }/ d9 B0 }6 ]' O
[1, 2, 3, 'key1', 'key2']
! i! j0 u, U3 ~9 C Q1 B * R( z7 c, o2 R, s' w7 g4 W
* g3 J. q* y) j O- ~4 H5 a. i 2、原理解析1 G5 T/ U' ]# y4 r
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。" ?7 ^+ L! S' P9 ~# i
# ]3 t& D4 l5 S- ^
! ?% b4 e7 E y3 }
/ R0 L. t+ Y c' C+ {. W; d 我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。& ?7 X) {3 e4 t. j& R4 X3 C
+ I! ? l; |- _# |' U$ l8 K list1 = [1, 2, 3]
" A7 N. l h5 n list2 = [4, 5, 6]
( M/ v5 @ \4 d: ?6 R; j+ \8 Y
$ ?$ w# T! i) E' Y" }9 I print(id(list1))# l* A& F3 @% B: y% v
list1.extend(list2)
! z% k: Z V4 i3 s: e+ J4 d print(id(list1))
) I$ p" F5 Q! q. C0 I
! O. T. k2 Z8 h% i' O9 l& {) S 输出:- V' @1 ]$ k% W2 y; w6 P, K. }
8 W5 y+ V; L) p 1930566508928! V7 l4 i( b- }( G* v) N( p
1930566508928
- {- z7 |- v+ {$ S6 k: w( ? $ S0 `+ u" a% K" ^9 n9 v1 k
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:& U3 _* F8 s- o0 M
+ u2 g# K* H& h: R7 ?9 A list1 = [1, 2, 3]+ X" p U: H( Q; H5 a! U
str1 = 'abc'
& C* l( G3 s; [, h% Y2 `+ F: v% s + G% ?! f- v* B! p
list2 = list(str1)
2 S1 H" P( g3 x2 M* o8 z print(list2)2 P$ P7 L H! u1 u7 U- ] C
list1.extend(list2)# z& T- s1 |& v1 n
print(list1)
# x# R3 z/ Q1 x9 Y _5 O6 s
( r, Q/ ^; K& v; ` 输出:( p7 f% c* H6 g8 K# a' Q
& `: d) u9 w5 Q n0 }# c ['a', 'b', 'c']1 d" ]+ a0 K* E2 v! u+ b9 Y0 c
[1, 2, 3, 'a', 'b', 'c']+ K- a; U5 o- c) x4 h2 G! o: L: B
; C) S; m0 A( L; h! G! C! m # A) T* {* ` N( h" I
3、extend() 和 append()、+ 的区别?- }- q9 j; l" Q3 [4 }0 Q/ }
以添加列表为例
( l, I7 Q# o- ~! H; V c) H t6 C0 Q" |8 G8 ^+ Z' Y+ I4 o" K
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
2 V! z' {- f& K* D, b% b' H # G. Q( t+ H R. w5 q3 q
list1 = [1, 2, 3]
4 | N# q. P0 n6 a( i3 x list2 = [4, 5, 6]& k4 }4 H9 V z8 r
6 e1 Z9 v7 \: v/ s2 s! } list1.extend(list2)
- R2 X! m% O% N* P% I: |9 z print(list1)
\4 g G0 f% K$ V/ x6 R. J( f+ Y- D6 a
6 }4 s; o h8 D. C# n1 F8 h 输出:: s9 K0 y$ Z3 Q* C
* @/ e) @' F. l5 S/ N% ]
[1, 2, 3, 4, 5, 6]
2 P- D, I; x) ~
0 E3 g7 ]' Q3 h" \ append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
4 o* Q- Y0 g6 F u @$ D: F6 W6 E
4 H! M. @9 n7 n; z( ] list1 = [1, 2, 3]
+ }- l) ], l" a+ s3 `4 P# Z" W( b list2 = [4, 5, 6]
& R+ j, e+ d+ O2 ?# e" \ % s! x" Y! g5 [6 H* v
list1.append(list2)
7 {& o7 t( t0 d. g- w; D( Y7 C( N# A print(list1)# p5 k0 A# [' L) j6 j- k
# b4 k. c) m, N( R1 q. G; Z E 输出:* d ~- Y6 r! ~$ w: L) F
5 w. c Z( ~" @ R
[1, 2, 3, [4, 5, 6]]
( v' |2 g" i; R; x' Y 4 a! ?5 V. h6 B: h$ g
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变$ Y+ ]7 ^1 q" m8 |3 L* a9 A
) t# P# }$ B* U2 _ list1 = [1, 2, 3]
) p* h% K2 g8 z; T2 D) Y5 @ list2 = [4, 5, 6]9 I# U8 ~" O+ W1 K
( |/ W" q7 p. h
print(id(list1))
' W7 j- b/ F. R9 |- ?7 o print(id(list2)); b( t: U' l. I( h& d' O
print(id(list1 + list2))
! L/ h! G2 _0 e- r
4 i% O% z) ^: }7 } 输出:
! `# W9 n% X/ `% m/ C* G
4 `4 c. L! V: k6 k' [ 2680876376448
. [- \- z4 F7 x( \) R 2680876376576" l# e8 d; N) G. I
2680878544128
( g) f( q- k* H% T * D6 }/ S2 }' F0 R! T2 h* Z
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
4 a0 u4 Q, T! } G9 D
( V s+ h& f9 _# F' }) j list1 = [1, 2, 3]; d8 ~' M: {+ P/ e
list2 = [4, 5, 6]
: } |& S( j! o, d6 a! T print(id(list1))2 b7 c! |8 d' Q) d6 F. D0 B& u6 n6 e$ a
list1 += list2
U6 A9 d; a9 r% _. I& [+ W* M print(list1) F$ V& b, r U4 c4 r: y! n! r
print(id(list1))8 ~( R: }# e9 ^1 p6 x$ O6 o
. {2 B1 t$ B- V1 I3 q# _) g
输出:: N% h5 R9 \, n4 @. [
! `4 C, A% ]! r 2150265921856* M$ A- p. M% | ?' u* o$ K( a
[1, 2, 3, 4, 5, 6]
' v8 z @, Q: c/ J 2150265921856
8 f$ E) |; _& p$ ?4 \/ \7 b+ E
b, G& ]* J* k$ @ * U9 O& R" n7 u# j5 M
4、特殊的添加方式
: k( q2 c4 N ?3 A' s5 G1 M 配合算术「运算符」添加列表
9 e* G9 u; v& w5 ~% `( }# R
# |+ s4 }3 `8 h list1 = [1, 2, 3]. _8 L+ b8 ?. H) b7 z* D- w7 ?3 B
list2 = [4, 5, 6]5 Q0 K7 E, `' x* b9 w8 S2 x- ^
% ?1 K# b1 O) _) { list1.extend(list2 * 2)6 k6 F7 \$ |% S$ S( G( x
print(list1)' s$ f4 A' u- H: \& z! K" T2 N5 K
list1.extend(list1 + list2)
3 A. K5 x6 U7 K5 ~ print(list1)
$ m; d" c/ F) D( }7 ~ ) r" {3 \7 u5 Z# f3 ?1 v0 {# x
输出:' Y5 `3 @; ]9 @8 M0 F
& i' F1 O, _# t. d0 G& B
[1, 2, 3, 4, 5, 6, 4, 5, 6]$ f) a' D* z y) ~4 ~
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]7 v* K4 y% L) z+ W6 S; x `; g
1
$ e ]. N" ?4 ^6 l8 n 2! z# F* R! T3 G& \' \9 ?
「索引」取值添加列表
( g! f/ _, R; Y$ Y# F/ T
" Z1 G z% s' v# D6 h s& L list1 = [1, 2, 3]
1 k" b$ B, |: b9 V1 T5 }3 w list2 = [4, 5, 6]1 H( T/ G# T% u
% o. {3 a9 u$ `
list1.extend(list2[1:2])7 A2 _- K9 T# B6 N |
print(list1)
8 M; Z. W6 G+ y- i+ @8 j8 \: _+ l. z ; u! }& ^9 v, N1 I W& u# V
输出:; c, i5 _) P- `/ I, A4 m
5 N: m' M5 T& G# [# ]0 l [1, 2, 3, 5]: y$ x: p0 |! J7 ?
* l8 g5 R, Z6 L, L
5 O" p5 a* O$ ]% c$ d3 {8 C
- |& V5 j$ B% d9 l
zan