- 在线时间
- 472 小时
- 最后登录
- 2025-9-5
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7679 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2884
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1161
- 主题
- 1176
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解2 b* U0 a7 i8 B& P, N
1、可以接收的参数9 O. b6 ^. ?# l# C
1.1、添加字符串 h% c! @* h3 J* C _
1.2、添加元组
N! U! d( K. V; Q1.3、添加字典# W+ I% p% `' c4 x0 g% B
2、原理解析* Z# }, N3 y( U( s6 w( K D( S
3、extend() 和 append()、+ 的区别?
% f, ]# r; N3 H: N6 y4、特殊的添加方式
7 ?# C& v# ^, o! uextend() 可以在列表末尾「添加」另一个「序列」中的值。1 w+ e6 \5 a" r; K9 B4 P
5 q* `9 i9 h. l& `. N. I! H
语法
, w) \0 j! F, [9 w; I3 Y' w# p* Y" w
list.extend( iterable )
1 [0 x- N# j3 `% y, N4 _" \) e5 a# ^" J- P" v
参数: R# G9 [% A' g$ G( S/ L9 [
' r0 w, U* _: L! H1 T, Viterable :需要添加的元素列表8 w3 \, g; ~5 t6 B* e2 |
返回值# s* @7 ^" R V9 |; [% u2 b7 v
V+ I& d Q2 w; f0 Q" w4 ?
没有返回值,只是修改原来的列表
8 o/ t) E7 {& n/ I* |- S实例:向列表中添加另一个列表9 c( c: M9 V; J M# B
9 }3 x( o) Q9 }
list1 = [1, 2, 3]9 o% Z% `' t0 E9 E/ n6 K6 d8 S4 D3 P
list2 = [4, 5, 6]
" e% U/ C& `& j2 R9 U k; B0 T! i2 J2 |5 q6 Z7 F
list1.extend(list2)
+ X8 W }; y. b1 O% Nprint(list1)7 s" ]. e* u0 Y! {: m
: ^% J6 u4 `& ?2 X输出:
; G& X% [: T+ O p% M4 l* p
; w# V; ]$ K0 D9 z$ B7 E0 K[1, 2, 3, 4, 5, 6]
3 a- J! h6 z3 L# f Z
% n3 B8 }1 Q- \- e' q/ l, Y& [3 o+ L. {* [
1、可以接收的参数3 p% T1 p6 `7 r0 S; V1 T
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。( |& G% u3 S% N& w/ |: _5 {- J
5 C% s2 c8 d* f$ c
3 i' _ Q: D. A6 }
1.1、添加字符串
! @, k& C' @8 p( E; gextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
6 o7 J2 `/ b! E- X" W# n' D5 O, Y4 L* }$ _5 ]4 H
list1 = [1, 2, 3]- @4 o0 i/ q" J0 G @, ^- K
str1 = 'abc'" m3 _+ T7 O4 `( t4 J, y: @% ?
* F+ Y7 b) t- k* J6 a+ o/ F5 vlist1.extend(str1)
% x8 x3 g8 N$ e! V5 fprint(list1); k* u( _7 \% K% R8 B/ i" h% o
* Q3 U7 V$ C( a/ c输出:6 e7 [, Q5 f8 x. r9 ~5 l
" `# a8 I( j. A9 N3 B, ~
[1, 2, 3, 'a', 'b', 'c']) B: Q+ E% U$ m5 N# e$ \ b; f6 R
) o3 }5 ]+ l2 b, n+ n4 u. A: H# c8 [6 T0 ~/ O# Q9 D8 }
1.2、添加元组) y' h) g6 ~% Y* m
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。. R9 n: Y4 o9 V5 X0 z5 O7 f6 E
7 P5 d7 n2 ^- o+ Z+ @list1 = [1, 2, 3]
5 d; R b/ J; x; N0 q4 p- @tuple1 = (4, 5, 6) Z. N% F* U4 W+ Y, h [9 D
B) }" d, h6 x& v9 l. C8 Ilist1.extend(tuple1), y% J# ?$ {/ ?3 V) a& t0 u
print(list1) P' z; {- R: Q0 o
' e( ~2 T6 f2 \3 ]6 k' b w
输出:
# H' H7 d5 O& \4 B
. B0 D- o; o8 U3 x0 H3 U! o[1, 2, 3, 4, 5, 6]) b! t! K" I) v& Q' D* v! ]
" g: j9 g& k- b. u
* D/ N( h" v' }* F3 g, P8 j
1.3、添加字典3 m% x5 g8 w6 p. P' c
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
4 k' i% C) O% d2 ]+ l/ K
4 P$ H7 t6 N; g# }list1 = [1, 2, 3]$ m* ~; b4 s1 t2 {
dict1 = {'key1': 1, 'key2': 2}
+ k, H; M0 e; H7 Y# B& ?
' h/ ~' F& M5 y) blist1.extend(dict1)
H) P$ j) W/ s' E% gprint(list1)7 M& A0 V) K" i5 f+ e" Q; {& f
8 _+ D5 D+ A7 U. Q) N输出:3 |" K0 T8 h# V+ u% D
' y, a. v5 F5 ?; G6 M
[1, 2, 3, 'key1', 'key2']
% a4 @9 r2 H7 w/ `! f3 R( |( r5 K
( F* [* D0 d9 ]1 n+ q5 S$ a
2、原理解析
4 w+ w3 m+ x3 ]& C4 E4 |6 sextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。! c1 U" H4 y5 V+ n- I% G; v! o4 S" `
& ~, R5 x- [/ y" ?7 B
/ `: j0 D: v: T9 |/ m! T, c p1 {: A
3 H! ~3 u8 D6 w5 r0 x我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。/ T( L( g. K3 b" P. B- H
( X! e8 S! U" h6 g7 e; S+ P
list1 = [1, 2, 3]
% g& z" E+ {, K* Jlist2 = [4, 5, 6]
4 R5 |4 \: r3 A$ H2 x9 l, P
5 L7 B8 Y) B6 n1 f8 vprint(id(list1))
, R3 M% s) h+ zlist1.extend(list2) j/ P( E( m3 B# t' i8 E+ W$ o
print(id(list1))
- X' E) g1 y* e2 K* i5 s( Q& K) k0 |" p2 S
输出:
& E( [+ I7 L9 D, O, j. `+ x
* t! ~' {" e' l# O; |% l2 h1930566508928. {& G& }3 E6 v' j8 W4 u( A
1930566508928
6 d. L6 n+ b! b4 ^( [* M
% I' l0 u+ W1 D* N+ Xextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
9 D! V4 x y; ?) H$ p& n% ?$ @5 A
list1 = [1, 2, 3]
) n$ f b0 g* u2 r# Q# Dstr1 = 'abc'
6 X% r3 S1 ~, f2 W) A0 U: y+ t4 G/ L! X, U* y+ E
list2 = list(str1)) w" @0 D1 r+ R; I+ D
print(list2)
1 O) g# z) B1 a( R6 C) i, ^list1.extend(list2)
6 |. R0 ^$ S5 `& M" u8 g( {2 ]( \5 Oprint(list1)
/ @/ v' j4 v" x1 l* r& Y) ]* H9 }# P) s5 s" o
输出:3 Q1 m. H3 l, h0 G. }
9 E, J6 n. c+ U- \2 B! B1 \% n
['a', 'b', 'c']
$ ?* K# C! `3 C+ _( [; ~1 ?- V: E[1, 2, 3, 'a', 'b', 'c']
- b1 @" t; m: p
! ?8 H- _5 U' S) b2 r% u; T. K& {
3、extend() 和 append()、+ 的区别?
0 r! J/ \- O- J/ d8 ?以添加列表为例6 F1 P# y* k3 h3 e9 |5 g
1 E! e" e) ?9 Z/ N, k9 S
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
/ [. h3 v) C# Y: b
" d( a1 r) t1 [) m& _7 J9 ?- Plist1 = [1, 2, 3]5 s) j7 C- r* F- F0 T6 z
list2 = [4, 5, 6]
5 o1 u% i/ o' d4 X- @8 ]8 F6 ?- J- u8 r
list1.extend(list2)
! C, K' [8 K! A- l# D& |& ~% X5 `7 [0 Fprint(list1)
3 Z9 N2 I2 C6 _
* G! l' }% s/ e. O1 z输出:
) o" O& s1 V% C0 o' x( T1 |, O
5 ~, ^: x5 V* O% f[1, 2, 3, 4, 5, 6]
8 P+ [$ K* j) _+ q* @, N# A( T0 B' p4 P
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中1 _" m; F; i. V/ x0 O" Q
6 T- ^& q( S j: G/ H: h& flist1 = [1, 2, 3]
. z0 H0 v8 Z8 |& [8 ^list2 = [4, 5, 6], l" _' s7 h3 l0 I
6 l9 h6 i; r% X) ilist1.append(list2)
: V: H* ?& ^# P- M$ Eprint(list1)6 N/ n- F0 M7 r) f; w0 M* L% q: K
5 Q! m3 O- B" q$ F- X
输出:
8 I/ \# E! j: Z# y' a" F" D
! t! Y; ]+ Z8 }. p0 F9 r4 W[1, 2, 3, [4, 5, 6]]
, m! p5 ]7 g# f5 w" `: I, k1 h, K9 k( Z# i
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
7 N. ~) j/ n6 O' b/ n k" G0 {
+ j% }4 }' M% U8 H, O8 j* O2 zlist1 = [1, 2, 3]
- R) Q0 h* Y! ?list2 = [4, 5, 6]
$ j0 k. k6 g! a, e+ w+ F7 i" U
/ p% y) l4 U& q, D2 C; zprint(id(list1))8 u$ q) G1 d& I" U' N" S
print(id(list2)). D9 e+ L x- t0 ?
print(id(list1 + list2))! M U. J s! Y+ b
: U; }! j( r( p8 @8 i& D
输出:* d' {1 x6 w! [3 ~
. `. x7 F4 }0 x8 s
2680876376448
; |0 s4 |$ s( w) s Q2680876376576
5 T# z5 U& y# Q3 p1 \: V% t& R2680878544128: w ^ h3 Z; j6 n$ E" n% Y0 _
+ ?2 O/ Z6 p7 f! s c; X+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
! |1 q) ]3 e6 ^$ g4 [9 G
+ r' h: }. a" K1 F/ a' w" `list1 = [1, 2, 3]
9 C6 d. e, J$ K! ^list2 = [4, 5, 6]
, A3 i& D% a3 {4 X8 oprint(id(list1)), A" ?& J1 B- g
list1 += list2! F* I/ K* D1 o
print(list1)
; }/ @% a0 T6 K0 {print(id(list1))5 W9 d9 |. I7 }
6 m% m3 P" Y( K+ l输出:4 h/ d) _ F' {8 M( ?2 v' P. z
4 s" ^6 Z, E5 Q' r" Q2150265921856
) X$ k9 ~) |% u1 t! X[1, 2, 3, 4, 5, 6]
3 x8 }) c7 i: O# @7 K% J2150265921856
, S( p) e! u. i- c9 [- v! c+ K$ f& W. @: c7 R7 l* L% t# X( f
, N d. L9 @1 C+ X+ |% F$ X4、特殊的添加方式
# s3 G l$ ^ d, C/ l- b6 f0 A3 y4 f配合算术「运算符」添加列表
9 o) L. A3 C) K" }" U& f, N9 ?; I; |# i
list1 = [1, 2, 3]
; ~$ h6 {; b7 Q) m8 p4 elist2 = [4, 5, 6]
1 v( E2 A8 u2 d5 B
* q. j7 ~% a1 H" w2 ulist1.extend(list2 * 2)) p4 E( y5 B, t+ I$ l
print(list1)
: N9 y4 K$ g; q" vlist1.extend(list1 + list2); B8 O; M/ O, }# T; F8 G
print(list1)7 J+ w! ?# T. e P; S% E& {
B8 t8 m) b! @% U. V( w
输出:9 t/ s7 _/ f% |% Q, H0 f) y' }6 T. W
) j' }. l) b' C( A
[1, 2, 3, 4, 5, 6, 4, 5, 6]
3 O z: N( m: a& A: @% c) M[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]3 L2 H( l5 p8 n L, ^2 A
1
: N: H& _9 n) U7 i2
- }* `4 |, }, r# P: h+ M6 Z「索引」取值添加列表9 F9 ~$ r- o% `3 S
T3 e' R3 I. o3 _9 t5 dlist1 = [1, 2, 3]& K3 x. Y1 w: _4 }7 b& m- F! s) j+ j+ ]
list2 = [4, 5, 6]
0 {( `) F" k: A+ @* ] u
% G3 W) w; L/ ilist1.extend(list2[1:2])3 j( w: l( o7 z- f; _$ @) }( ]
print(list1)- ^$ G/ C* Y5 k) z
) u3 e. g) i! N1 O- J0 |输出:
$ j6 M$ h/ D. D1 f' y- d n; Z5 g4 b2 g& Y
[1, 2, 3, 5]
, m% _# \% A1 G) ]: y) k2 h
; m* a( {9 V+ s* l" Z/ q: h
' B5 r& ^5 _6 t j$ i6 F. L6 H9 | q1 [
|
zan
|