在线时间 472 小时 最后登录 2025-9-5 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7691 点 威望 0 点 阅读权限 255 积分 2888 相册 0 日志 0 记录 0 帖子 1161 主题 1176 精华 0 分享 0 好友 1
该用户从未签到
extend函数使用详解
0 k! V$ D' ?4 K, u 1、可以接收的参数' i% j; L+ \; \) Q1 r
1.1、添加字符串9 ^: ]4 @. B& O" F( Y0 W
1.2、添加元组
8 X# G( T* P* l 1.3、添加字典1 i$ d7 w7 f' b( P% ]) L
2、原理解析
0 j+ P! R% g6 v 3、extend() 和 append()、+ 的区别?* b% S# c+ j# S$ _! T$ B2 o# n. a2 C
4、特殊的添加方式
% Y% \2 ]7 Q/ ^9 _ S extend() 可以在列表末尾「添加」另一个「序列」中的值。$ M8 |9 Z' T. I; G8 d% C6 I
) E* J' P6 j3 ^' o/ F 语法
, t3 d) y# s# j! n ) p& z9 B/ S) e+ _' J# _
list.extend( iterable )7 d5 `1 ^0 U: C8 Y4 Q
9 @9 w1 h; \! @4 k) {, P! N 参数
% i* ^$ J+ X/ J1 |0 @. p. f1 ` 0 H2 p% z- Z: r2 }
iterable :需要添加的元素列表2 H: g: f* A9 v' Y2 U( U
返回值
9 ^% L$ g4 @% y1 ]0 M3 A0 S ( ?* j5 `, K5 w/ f
没有返回值,只是修改原来的列表
8 V8 H- }) H- ~3 R/ V2 r 实例:向列表中添加另一个列表+ Y+ e, `4 p% t, k8 J+ @* t5 J* l
" B' a7 u4 C7 ^' z: r list1 = [1, 2, 3]1 [5 t/ B" U) j" ^, u$ G0 l3 N
list2 = [4, 5, 6]
% |4 v1 f) j0 B1 h
) b/ u6 m* I& D) _ list1.extend(list2)6 J8 Z8 ]( E1 P9 H
print(list1)) l" U9 i7 ]1 V4 M( i( z
% E8 L$ w% x9 v6 { v2 f7 x' Q 输出:
7 \7 A9 i t) j/ k
. V* Z5 Y6 Q, r: c! K7 i1 L7 a [1, 2, 3, 4, 5, 6]* H, z5 A9 _$ Y8 t% b% G2 E
" M) O0 P+ j0 P0 _7 N# }
9 U! z6 U. G4 V4 V2 N 1、可以接收的参数2 y6 O. t3 M; b8 j- a; p4 y
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
" o' b+ Z: o z% j* C, q
! V/ W' o# g S X c2 C 2 V/ \5 g2 } J# f, \
1.1、添加字符串. Q6 Y: l) j# u1 O
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。+ ^% M$ a7 i( V3 R
1 U1 m& p9 b7 N list1 = [1, 2, 3]
( Q" [" X% p; F; J) I9 d, O str1 = 'abc'
) J. Q7 Z- s1 f2 p. z2 C
" o+ T' ` J1 q list1.extend(str1)
- ^0 t# h* H2 r4 d2 G) U print(list1)
7 h: C0 y/ V! P, b1 t/ E. c
0 d; D+ }& ]7 D 输出:
+ Q+ P3 z) _3 Y* m) S3 Q" { ! c( X9 c. G T$ z P$ K
[1, 2, 3, 'a', 'b', 'c']
* M* C/ V8 m1 v2 a. s ) d5 m; y6 M8 u( I; C5 m
( ]' c7 f; l# t8 Y9 h
1.2、添加元组7 T8 b0 O) T! I O* C M
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
8 L* r; \- H. D1 e7 B4 y" N $ a& [$ V+ A9 F8 a3 |# b
list1 = [1, 2, 3]
6 O3 c7 P% q* }3 S tuple1 = (4, 5, 6)' Z; v& X: Z# H4 ?& }; U, b4 A
' s% C# R! |! _. J
list1.extend(tuple1)
" o4 O$ l+ N. p% a( N. s1 i d print(list1)
+ e8 K# \+ r/ C( g# M : M! ]+ _' j. _ r( t
输出:/ e9 }2 H5 ]9 B+ x
% P; G/ f1 o0 G; U) R$ S5 ]6 S [1, 2, 3, 4, 5, 6]0 q& k/ E5 y3 |5 g
- Z! S' V1 \- P# P
: r# t; A v& I 1.3、添加字典! `) o' X( y& F8 D0 @. Z% n$ o
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。7 t9 ?4 d+ o. G7 c
! G! \+ h. m+ B# n
list1 = [1, 2, 3]+ t1 q m2 N8 z1 K0 n1 x8 I
dict1 = {'key1': 1, 'key2': 2}+ d+ r8 s8 v, T
! D2 n ~8 F, @4 k: { list1.extend(dict1)
7 D( F$ { l6 p$ ^1 A! U print(list1)
9 s6 C9 x `3 h6 f) |
4 r6 |; S1 {+ @ 输出:, l$ z: r1 R% Q3 k
" U, Z8 k. |3 g$ U) ^; g" I, p4 q# b, c
[1, 2, 3, 'key1', 'key2']+ P z, ~+ }1 f! ?3 I" j
! A# ?, h( v- W% p/ n( v
3 F1 b: |1 y6 u- b+ y 2、原理解析
3 D% t ~# A' @3 o extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
' ]& \% Y5 ]" Q # o; d' E H. d s* C' S
W+ _9 N6 s t" [ m6 |
7 a+ Q9 m& {1 }6 @6 Q. V6 r6 V
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。8 J9 v* e& s* ]$ g3 l! U
7 f2 Q* {6 K& g8 L$ B7 f2 y' @- z! P; ] list1 = [1, 2, 3]2 E( K- h; m' [' Z
list2 = [4, 5, 6]; T! g$ L2 x- R
. K ~" H; M7 O* {% Y- G; W6 }; F
print(id(list1))
. e. d+ Y9 Z$ O list1.extend(list2)
& G* Q1 D6 t; Z- O0 ?( ] print(id(list1))
6 e* J; q1 i& I5 k
7 o) r) B8 M- p2 q( C$ i. } 输出:
& L1 D, g$ k8 y 0 G$ W9 H0 |. q" b3 Q
1930566508928& k* B& H1 u1 B% h( e3 i2 H+ U @7 W
1930566508928
% Z- u8 r8 e. R
5 ^' U' K- m: N' w* W `+ j extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
' A! V6 [ `( {/ R/ S% z$ i 4 E, V; }% o9 T$ |- d9 V& }! _6 [
list1 = [1, 2, 3]
0 B/ L }, _2 l- c [ str1 = 'abc'* I) H( |' }5 a# J: V W' f4 [1 N
3 N( i. G6 K+ ?6 s* x
list2 = list(str1)
# l( w, h$ d2 Y5 W# @ print(list2)
6 r) {5 ~2 F8 v- G9 p- q list1.extend(list2)
) n8 }! F* a6 D, [0 R print(list1)
( c7 H; [0 L! t2 M8 m, L
/ d+ l; ~# {& W; Y* t 输出:* y7 j& a( }" j0 [% S; X
& u3 f. ~9 q4 f& _$ S" C ['a', 'b', 'c']+ ?+ k1 ?" f" w0 B' t' X
[1, 2, 3, 'a', 'b', 'c']1 p3 B' g6 B# K. N% w" a) }
& m# B- ^6 }. ?. X
) T! |2 p0 O9 Y+ A; H8 X
3、extend() 和 append()、+ 的区别?) t8 X: t6 m: f# ^0 {5 D
以添加列表为例
* s' V5 p5 ~8 w9 ^: d/ j' v& r
6 r3 l( X4 o$ E; [* f extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中: p0 V$ D4 f! G' ?( q
& t. @. u$ j+ ] list1 = [1, 2, 3]5 \0 |0 \+ g/ u/ i; d" P& E. d' {
list2 = [4, 5, 6]
1 U. ?9 I' i) _
} k6 T" h; I& p1 J5 Z! Y list1.extend(list2)$ K; a7 K1 M3 L7 B- X& _+ |' G
print(list1)
) Q e* n7 }( j% k% W3 D
! I; _' Y1 M! D/ t. a 输出:
8 I5 E+ q6 H6 Q+ E
! {" {" z. y" n7 |" ^, _$ } [1, 2, 3, 4, 5, 6]/ Y7 F; P$ K+ _+ J
9 g) g5 m' `8 q0 b& i
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中, D# f* L5 ?& ]8 g* k0 H
, ^' Z2 D7 N2 G1 ]& V: x( h
list1 = [1, 2, 3]
& N! \+ ` L1 h. r8 r list2 = [4, 5, 6]
" w9 A9 J6 \$ Z 3 P4 o9 T2 _+ B$ T& I; r+ e# I
list1.append(list2)7 x$ D! H/ S0 o( Z9 E3 l
print(list1)
: e4 i9 f2 p. C# T) Q9 H $ E6 R2 x6 _% [+ l
输出:) `: Z; O& [' c1 W. C
& C$ t3 }: w. b) ^6 p1 h9 m [1, 2, 3, [4, 5, 6]]8 B6 E% k% A7 r7 _9 Z: G( j
: x" H4 {- e7 @& i" l. \" u5 | + 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
$ d. V; q+ i: C* y
. _8 D, R+ p4 e1 y8 _* I list1 = [1, 2, 3]& H4 u$ G/ J- ?; ]; Q' [
list2 = [4, 5, 6]4 G6 H1 ^ ]& O1 R( ]" Z0 d9 v' x$ i3 Z
& ^ P/ A8 C& {# b* t9 o print(id(list1)) z/ E* o9 n7 Z6 ^: C
print(id(list2))
5 K: D" K$ S, r* ?% l print(id(list1 + list2))$ w7 _7 }4 h. Q
% x$ r' J. N H3 A1 h/ G
输出:# P% Z9 |% i* U# K
2 h! `- ?5 N' v! Y! z: U. x 2680876376448
$ D- _7 S/ ^% q 26808763765768 ^8 N9 S5 l) l) C
2680878544128) Z) D5 ^ J4 k. h/ {% T- u
- d$ {" k W& {& x, h+ N. Z1 b += 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存) L( v0 U& U8 \. D+ ~: [+ S
+ x( _! Q" M9 Z8 T/ t8 K) i
list1 = [1, 2, 3]
$ P9 E/ A8 a9 r& X" r list2 = [4, 5, 6]
( ]2 Q9 `9 b6 i& S7 |: Z print(id(list1))0 _8 T4 s0 f/ s, V- A
list1 += list2
) I% p6 p5 Y6 n# N5 a print(list1)
) h/ Z' Q/ K% @ print(id(list1))' d/ L ^* Z3 o- s3 @- t
1 S9 X3 K; m4 n6 j. n+ o. a
输出:
) q( O* d8 }& K6 w4 O _ ) Q, M$ z* d* E
21502659218561 V0 c: M& l+ ^0 R: U
[1, 2, 3, 4, 5, 6]0 n) w0 ^" M' M( X( ]0 S. {+ k
2150265921856& ?" E5 ] ^) z1 J2 d. {
$ \0 b3 y" @) D- x' G+ f* \! e
7 F! p, q6 R7 ?* i 4、特殊的添加方式 @8 U2 o; p$ n3 S+ T
配合算术「运算符」添加列表
7 {/ |# s; c. Z% h5 m4 s, l6 R7 b( B
3 t8 s9 g3 j' K( Y1 _ list1 = [1, 2, 3]8 R7 s# J- E+ w
list2 = [4, 5, 6]) l6 L8 f1 j" i- w, @
! _( L# E; z* x list1.extend(list2 * 2)
# a5 q6 A& G4 X# z; L |6 ~0 K print(list1): w* e5 [) Q; Y9 b3 Y. X, r
list1.extend(list1 + list2)
4 v+ p7 a3 p1 r T print(list1)
. F8 o' b1 |. O" j 1 ~! _1 P# N; [) v! s4 |
输出:% `$ S6 I7 @. F) v3 j+ n/ h
8 o+ ?/ P) g- y5 F: L [1, 2, 3, 4, 5, 6, 4, 5, 6]( {. g5 b' |- M, A' V( e
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]; E8 J5 e* B x2 O
1
$ r/ i! T' c0 h' K 2
) g7 g6 ?8 N* t- @5 k: F 「索引」取值添加列表
3 `" T/ y; P: f0 | . v% U/ M( E+ h5 ]$ b7 L+ ~
list1 = [1, 2, 3]
- V1 H/ Y2 E4 n! I, G2 L: W, { list2 = [4, 5, 6]
- U0 w O% m. N) A l2 W
6 ~* l( l+ J* ~$ |1 _2 Y list1.extend(list2[1:2])
/ B+ D+ h" D! @4 P print(list1)
8 x% ]7 k0 M4 ~7 ]) N3 b& V 1 o5 o7 O1 x8 z0 v3 d
输出:
9 r; ~0 U7 ]' i. I& L' f4 f ! V; n+ b5 ?0 j! q1 ^
[1, 2, 3, 5]
7 C% B! G0 q( K. ]# p4 a
) \$ R; y2 F9 }5 d) w6 T3 _% b
3 p$ l% E% V3 t3 E% Q" { $ k0 J- {. O0 _% j
zan