- 在线时间
- 481 小时
- 最后登录
- 2026-8-25
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7859 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2946
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1177
- 主题
- 1192
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解! g" k% V9 c% q b* x t
1、可以接收的参数) X' R; R4 p# N% G2 N2 W9 W
1.1、添加字符串
7 x# ?7 u+ ~. E' ^) \; n! p7 H7 U1.2、添加元组 G4 a U( d3 X2 {# r. |
1.3、添加字典
" _ j' C- L' ?# m" G2、原理解析8 `. J7 S% i* |" o+ k6 H/ z; b# U) c
3、extend() 和 append()、+ 的区别?
5 T/ I& u" v9 ?6 ~4、特殊的添加方式
8 v( w/ c* I4 w" x4 [4 pextend() 可以在列表末尾「添加」另一个「序列」中的值。
' g! j4 y; l1 M. U: G
: X5 @7 g2 b% M- x9 _/ J语法
5 Z, C P: U9 y# E- I) o# x4 r* i# D5 m* A. }# U" V' W
list.extend( iterable )2 Z3 `2 r4 h/ h0 o
: k1 w* u: ]6 X" z参数/ x8 w5 D0 a+ Z. {7 @* W- j+ i1 x! J
% _6 [7 T0 N: m2 S. @; O. qiterable :需要添加的元素列表: U. x2 h) L4 l, A9 E9 @- C
返回值! y/ J0 Y* Y% @, E, N
# [! w/ H c: W没有返回值,只是修改原来的列表
! F9 v" y% u" \$ v# h- h实例:向列表中添加另一个列表
7 m, g: m7 n2 u+ P% R4 b9 l. ?: f, \* n/ n
list1 = [1, 2, 3]
! ?, e3 A1 w3 Hlist2 = [4, 5, 6]
6 l1 k: K) M3 w+ h6 \' e: @
- ]2 d5 v3 f) r1 K; ~- Y# F6 Z' n: s$ Zlist1.extend(list2)
7 T/ u& O' p# ]6 E- N/ lprint(list1)
& }7 r& y9 w% t) O, f; z
' |, T6 v: A1 D9 b' M% B; z7 J6 o输出:) A* C+ J9 _8 r9 ^$ R! k5 ^
; Q. S; ]; l" B4 @% D5 |[1, 2, 3, 4, 5, 6]% {/ j5 @# C5 o1 u! ]: T
5 H8 d2 t- S; ]# }+ r
% L6 i/ B$ B$ r8 I+ o! v" w1、可以接收的参数
3 T B+ F' c2 @6 R; l/ y2 bextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
4 ?" _( ^* |7 E; ?
' m: b" ]; O" E3 j
$ w# i3 N1 ` z4 K- _1.1、添加字符串
i2 Z9 a( Y6 ~) X4 dextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
9 F6 s. A* G- b, I6 C- C/ l$ t2 h4 g& o0 f3 n/ \
list1 = [1, 2, 3]
: D1 i+ J$ D9 F* I& ?str1 = 'abc'; d) ?' ~- c c$ x' W$ E' ]
7 M+ J' U6 a4 P6 [( s% hlist1.extend(str1)
9 w3 M) O1 T8 l$ F# mprint(list1)
/ E7 f- J+ ^. S5 L0 ~1 z/ d' X, D& q
输出:9 [: I U; d, h6 C
! J% @ X0 |, M. f, N
[1, 2, 3, 'a', 'b', 'c']/ Y: c9 g: G: e
+ k/ y' g. W2 D( e2 v; z' L$ [
. {4 J! r1 E* U' f/ R1 w! N; L1.2、添加元组3 q; t1 {0 t; N
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
6 }# r H% F) B( I& E' _/ N
% n- h+ R- n& llist1 = [1, 2, 3]
. w9 w. ]& |8 `! I g4 z" M* xtuple1 = (4, 5, 6)
) R! r$ b/ e8 v
- h' h6 w# v! M- g" x2 Slist1.extend(tuple1)9 Z* @' I9 x3 T
print(list1)
8 x/ g) f7 g- ^2 j: `0 x" p9 M: o: v3 E% f7 b3 \
输出:
! g9 d% u1 v! ]$ c
- h; X% L) |' K4 G+ _2 W[1, 2, 3, 4, 5, 6]% D2 Y8 ~5 w$ d
5 ?/ {% C+ I! h0 e% m) c
* {' H. V5 t2 r T/ y1.3、添加字典
- A" f3 x# G4 @/ A% z0 hextend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
% P) F X# B! R3 u' J& ?( {2 u
1 T k. S6 r% x! H7 S8 ]& J" nlist1 = [1, 2, 3]) c* K! B, B, l( d' q' d: {
dict1 = {'key1': 1, 'key2': 2}
9 J7 b7 b" L6 d8 B- l- H( h3 R* R4 i* p7 ~3 H
list1.extend(dict1)
( d% v. d" {9 bprint(list1)
a9 s, E* R! p6 r* L) u/ ]! z. r
9 T$ ~7 E9 D4 a O- U; @0 [; q输出:
: i$ F- H) g9 k2 z9 p; L; |+ E2 R( [% C: F
[1, 2, 3, 'key1', 'key2']# ^4 _3 o3 S/ k" u9 D* h
2 R0 [: ]8 i) P' u4 l+ ]' ~
" D3 a p k! q2 O, w
2、原理解析
' o( i/ q. i4 c0 n/ sextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
# z% U6 Q$ o' f; c
, R) |. s) E+ [* _0 C4 c1 a
' `, j* I' g0 n/ V" ]
+ R# i6 g6 A: L8 M我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
8 z/ F! j% q7 n9 q) f
9 G- h: U6 s; v$ _list1 = [1, 2, 3]5 Y1 d: g) L1 j, q1 X3 P5 C8 ~# p
list2 = [4, 5, 6]4 j1 C* F7 p5 ?* Z
E) Y& d+ n* t; g; Y& J
print(id(list1))7 R$ Z' p& _4 b, V" S
list1.extend(list2)
/ e/ Z" F# D9 b5 a0 Wprint(id(list1))9 Y% X+ a- i0 L: p
0 Z. ^* `; L: \6 E2 k* j$ }输出:3 S0 l7 c" G, w4 z4 H: B
! N" k1 N# t. `8 P X1930566508928
3 U) K" U0 ]) U/ J* s' l1930566508928& z6 m: s9 e4 X# k( V" [
8 X6 k# N# \2 A+ w }* Aextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样: P+ M" n5 P3 o$ \0 d
7 b( ]( E: c! A( u
list1 = [1, 2, 3]$ A, }( P2 ]+ v+ c4 Y
str1 = 'abc'
5 \$ ?- r& V( ^0 B1 Z- s; ]+ J! y% a* @& M& @4 J/ b
list2 = list(str1)
3 u; U( _( X4 ?; I" X. Lprint(list2)7 T( Z$ T7 o5 j: {& f3 F
list1.extend(list2); U2 g* m9 F$ q5 l4 _
print(list1)& ?3 T% T A; K9 V1 T
' ^* P# j3 D9 s g6 I
输出:
' C5 j# i4 y Z; X* s# [" ~1 r8 o( g8 z1 A1 U
['a', 'b', 'c']
) z5 \0 n; i$ d[1, 2, 3, 'a', 'b', 'c']
0 j6 Z1 U, l* o4 J; t7 H- d! l4 T, W1 Q- b+ y J
w: Z2 J( P2 Q7 g/ X3、extend() 和 append()、+ 的区别?5 l: K9 ~! K: t+ D
以添加列表为例
3 J1 S; m' ?( d! x9 T6 X8 f. ^* j1 J$ q8 X+ Y1 h, O
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中5 V: m! d0 v+ B; X# C h, Q
& T1 Q8 D4 D2 c( J0 Z6 Plist1 = [1, 2, 3]! M& m6 W9 L) R P
list2 = [4, 5, 6]+ d+ _ Q4 I, S" D! L: p" _* e
- a" ?) a) o4 [6 V1 `( ~
list1.extend(list2)
* A8 Q, W6 b7 m/ l+ Eprint(list1)
4 ^$ p3 v+ l! t! o' _- _7 Z6 G
7 E% \- O |) L输出:
4 z) I0 ~- t3 U/ o v% D
! c9 c' B d7 h& c8 a8 H" y+ f: ^2 w[1, 2, 3, 4, 5, 6] B$ j# @+ J; i1 t7 A, }
* n6 c! |/ V* F6 Eappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中% c/ V1 T( S! r9 p5 T
9 M' j6 `5 c/ M8 ^# Q" _+ j8 hlist1 = [1, 2, 3]4 R- K* e! @2 |: k
list2 = [4, 5, 6]
; t; n. y& p) G1 w" S+ k6 _4 @- |$ ]( c
list1.append(list2)$ r5 F; a3 I) J
print(list1)% R9 Z8 U3 K9 o' M4 O+ M* h% e
* \( `; w; X5 X1 Q6 }8 C输出:
4 a4 l, [' u& \3 ?5 G3 C) V7 S7 {8 t9 G. g8 B
[1, 2, 3, [4, 5, 6]]- ~. ]& s( ~1 O6 o, I4 ]
7 e9 A9 Z5 }: c7 M* Z% g6 ~+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变, x5 v8 ]. Z' p
& i0 P# ^6 V" ~, plist1 = [1, 2, 3]/ l) Q; p1 ?2 i1 X
list2 = [4, 5, 6]
5 J" ~2 X" P6 I0 [2 E c l2 O
" q- s& d, C- R! z+ }! @- fprint(id(list1)): `( R5 F* g) i7 }6 M. h
print(id(list2))& d2 \5 M9 k* A0 O r1 w
print(id(list1 + list2))
" @0 e6 N. H7 h% h4 H% ^* C$ w# u1 l5 G! l7 y
输出:9 l, G- N* C3 j/ ~( y
! n: r, V; m3 [$ L2 A2680876376448
2 Z! x4 y- |4 O" h; c2680876376576
/ I1 ?: y! d% H! w6 m0 r2680878544128
1 F6 e5 B9 {$ Z# p. X; a; j- M2 k: P8 h
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
$ K& g; Q* Z& C; K! M' V+ x% V2 J$ m4 M" p! q; i C
list1 = [1, 2, 3]
! z( {( I0 ]& w& |0 T; Mlist2 = [4, 5, 6]/ ]0 I# O0 L3 n; `! q
print(id(list1))
1 y% I- I/ R0 g: p! a) }list1 += list2
) v# s0 L, R2 z) k0 w' Aprint(list1)
" L" L( i* e2 h5 P% P. r/ Bprint(id(list1))
% r0 ?* S2 ?+ N- c1 C" g: |. Q. c1 [, @ n, c. z4 {
输出:
7 o6 P5 a7 I. t% C3 }3 }- `6 | R, p
- c& f5 e! m" V, ?- _; V: F4 Q. ~9 F2150265921856
1 B o. }. e# }, f, f' Z# u4 r. T* m[1, 2, 3, 4, 5, 6]
* d5 o, @, @' s S$ u/ _+ X2150265921856
5 \$ H$ k; f$ T0 w4 W1 `/ g& Z9 ]; m% n2 U! l$ o+ v
+ y" i1 [- [' ]5 ~( c% I- R4、特殊的添加方式
- @+ Y0 Y8 O+ {, d$ @& N. d( j配合算术「运算符」添加列表
5 i, g# y6 A$ u, U- `
% u3 N; W! m. A4 R* W" t' [list1 = [1, 2, 3], u+ N. ?; Y) m x" |5 S" i
list2 = [4, 5, 6]. ?- f+ s5 I- n. U; ^+ c8 I2 Y
- C0 h" A& Q. o+ C: S6 g* `
list1.extend(list2 * 2)
; _' j! u% z, p; G+ N7 ^- {print(list1)
$ s ]! n# U$ n1 E9 wlist1.extend(list1 + list2)& R: y; h! P4 ]& l; v
print(list1)7 E) B+ x# r( N1 m
. @' x% p) q8 Z输出:( T6 m' L6 n$ o% l5 B
- f' P6 t- L' y3 H- l+ G[1, 2, 3, 4, 5, 6, 4, 5, 6]
7 x' B# e$ V% q& ?# ?$ e/ n) I[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6], ?$ }4 Z3 k- L5 n$ k
1
9 V: v" F" q* x8 T; ^24 D1 L" n, w/ M- b- O
「索引」取值添加列表! ~. O6 O6 I1 u( e1 ~
( @" _0 F/ G. X hlist1 = [1, 2, 3]5 [1 Q9 O# w0 B" @5 X6 \8 n
list2 = [4, 5, 6]
- x4 q* E% m8 g- v$ R" ]
1 s0 c ~! \& C8 dlist1.extend(list2[1:2])" p7 n& \# r" X
print(list1)
( k+ Y0 p3 s$ i! q: Z6 z) F$ b( X; E3 W. {
输出:
7 \' v; s! e; ? T) Y2 s
2 q1 f) P0 ` h; u( L( O, C4 B8 {[1, 2, 3, 5]
% A2 l9 M$ A3 u. l% n1 S/ j; M3 O; z5 t$ @2 f6 e' ^
% L; T4 N5 s2 F6 p$ P" k
* ]6 S- `: k/ Y) v& j) M |
zan
|