QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2801|回复: 0
打印 上一主题 下一主题

Python 列表 extend()函数使用详解

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |正序浏览
|招呼Ta 关注Ta
extend函数使用详解
9 A( C( M6 D, a1、可以接收的参数
4 k2 H/ ^, F9 p; z$ H" w) r) N1.1、添加字符串
& G% ?; R, P. b9 c  Y6 y- w1.2、添加元组4 C5 K# K$ r' R8 \; \5 s
1.3、添加字典
+ e# P* g: J# D; j$ u! |1 M- s/ }2、原理解析4 \2 \# W  Y! }/ ?" Q5 N
3、extend() 和 append()、+ 的区别?5 a" h' U9 e7 _8 \& w6 m, ?( p2 M7 m
4、特殊的添加方式
2 W( @& Q) a4 Q. Q; o; t# V, ^  x, Zextend() 可以在列表末尾「添加」另一个「序列」中的值。$ L) K5 D8 H1 y

( ^3 i) ^$ J  \: a8 a* G语法$ r! [% Z/ Y2 w. c6 J3 M$ k

# O" o3 q* U, q" T* J1 ulist.extend( iterable )( O# r* b8 T7 p6 P
) Q' c7 `, J+ o5 [) {1 z7 R% C$ F
参数6 [$ x+ [: Q* V. N; `  Y

3 r. ~+ N3 m; Literable :需要添加的元素列表& U  u" I; s+ v! E0 s
返回值
/ [4 j! C! {7 e& U8 t9 R  C, o* x' m+ e' ?+ x' A. B! Y3 N
没有返回值,只是修改原来的列表
4 Q, I: M, B- |$ B实例:向列表中添加另一个列表
7 {0 L3 F5 Y' _# s; E  j% ]8 @' r7 q) i8 T% V5 f+ y
list1 = [1, 2, 3]( `% z' I% ]3 W' r+ u
list2 = [4, 5, 6]
9 q0 S; K! Z, B5 d8 L9 n( v# Q  o8 t: q- K
list1.extend(list2)( [3 E8 V& A, O9 e4 }- X9 X
print(list1)
0 @5 N4 ~) \' ~% T( b6 J9 A6 c! O; v& ?
输出:2 j" y; J( C5 v2 @
* |0 x! K* a0 ]
[1, 2, 3, 4, 5, 6]
3 [5 }0 t3 `2 y3 {  r' t* c- Y- _" O% ]( O

& i) m+ b. e* \: k1、可以接收的参数
8 k% L, b9 [+ [7 }: a& Jextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
% p* q. G, t0 Q" F( h" d+ m$ W. |; h  W9 U/ X

) J6 }& n2 l4 X' V8 c% M1 u- ]1.1、添加字符串8 T0 R" {% K' x' F' O6 R' F' e
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
) e+ r; b7 |$ I) F3 Z; o# ^7 a' Z  m4 ^% T6 y1 a" a3 h
list1 = [1, 2, 3]
- f4 R% B- ~6 @1 W% _3 Ustr1 = 'abc'% f8 u; Q2 Z$ _2 U: u4 ~5 m

6 V- [9 x; T; C& w: O) L0 v1 @; @list1.extend(str1)9 i0 s9 v/ J4 N& O
print(list1)
6 A4 {- E$ w% S) J0 M" j- I/ z2 u1 u: O! P3 v' C' l
输出:
; B8 K$ U1 F: j) W6 R3 p
" g) l( q9 B$ w9 C: O7 m[1, 2, 3, 'a', 'b', 'c']
: O6 r% G: T! d4 }- q
  B7 E; ]* s4 Z. m
7 Z9 X. ^+ x, O) X1.2、添加元组. A0 X; c8 E  c7 _# ^! w, H
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
* v& n+ t. C2 ^/ ]4 n8 @' b6 v7 p& n' ]4 k' X. V
list1 = [1, 2, 3]+ S8 v5 R+ k1 F
tuple1 = (4, 5, 6)
* R7 ]: _9 ?1 j9 U; S
# U& F6 }- \2 g* klist1.extend(tuple1)
9 z  k$ {) v  ^1 K, Fprint(list1)* W1 q9 H+ W, M' v3 q) H

$ P* P* |/ O3 G! y输出:
1 f+ a# o# B5 b* m
; O% \" _3 _$ _( b! y  i3 |[1, 2, 3, 4, 5, 6]
+ r! j8 h8 V& D% P! B) Y
. ~2 g' _! C9 r( J# H: v; c& B; W% l$ b. H8 ~8 G9 R; ~5 p
1.3、添加字典
4 r- A5 e3 Y5 Eextend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。0 O( |/ z. Z. q/ j/ a

: z# }9 |  z2 b4 E( ulist1 = [1, 2, 3]
! @" n8 W' `5 u. B% Adict1 = {'key1': 1, 'key2': 2}
, D4 G) X# b7 U4 @3 @+ c  G! a: Q: y; v/ Y+ e# b: M* ]
list1.extend(dict1)7 ^6 G) X7 X& h1 b% k  t' A2 m* I
print(list1)
4 q; ^( ^4 b9 y2 `& N2 C8 k; L( c/ E9 ]) }7 `6 e
输出:
0 b+ F/ U4 i: e  Z  x5 T+ x
7 @" `( c: m4 v% l$ ~3 N" D[1, 2, 3, 'key1', 'key2']4 [$ j* }2 M3 y) p/ b; [
' t/ R7 V4 _! l$ ^, w$ `

% c8 g' G/ t- w& P& r$ W2、原理解析
& [0 v- s4 E) l: u! q& Q) c! ]extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
: U% w/ R/ G" l, w* o! L' f7 k& F. c( N6 N
( P. K' e$ I# n0 N. Y' M: M" K

% R8 s" E8 }: T1 h, z我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
( I: Z0 q: I6 ^1 o0 _: V* o$ B* B  a! ~6 _* S8 J( M
list1 = [1, 2, 3]
* s" T% y& h1 [list2 = [4, 5, 6]8 f6 A$ Q: x2 e/ J  G' K$ \3 ~
5 _3 R+ \/ o' _' l5 |
print(id(list1))
  `  @9 m7 L4 e9 R) j0 O# nlist1.extend(list2)1 N6 Z1 e1 S/ H
print(id(list1))
- G& c" ?0 w! {1 @- `4 J4 D, ?7 h% _" |, m1 R7 j9 `1 F0 h6 M
输出:
5 a  U4 g- J/ y/ o0 m1 r1 m9 J
- y; H# N: w* E9 i5 \5 }) u1930566508928* |) @9 q% _( u" H+ ]
1930566508928
! L! B3 X9 L0 ^6 c% I
& r" H; B4 C8 U; \; S, dextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:" [. E; ?) z* i1 z
7 \" ~2 `) @) U. z1 u: e3 J9 N8 |7 G
list1 = [1, 2, 3]3 @& z$ P  b% D( Y5 Z" W
str1 = 'abc'3 t8 ^7 f. s, S) T( l

7 m& Y; U* p1 i- `list2 = list(str1)/ a8 q; g+ j3 H+ l  h! \
print(list2)# z2 L0 V; A! l4 i" W4 I
list1.extend(list2)
7 p5 {4 N3 ]5 J: U$ uprint(list1)) m+ H" q  b+ ~8 Y0 y/ ?  ?
4 F1 u$ |8 B& f+ u1 d! Z: j) W
输出:
3 b' U1 f5 k! n2 t4 P2 L/ Q' _) d8 ~) E
['a', 'b', 'c']
* M, r. G0 A& s) i9 Y4 p9 e[1, 2, 3, 'a', 'b', 'c']
$ j9 H1 ~- R8 l+ ?+ X/ R
) s+ `: z) n( c: T6 B2 }3 q& q
) {- r* P9 u; @$ g3、extend() 和 append()、+ 的区别?, h) \9 |8 ~5 k9 M- i
以添加列表为例
, s3 `7 y& H1 }0 X3 g7 @7 b# B9 q: R5 o
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中" a" I- I# U9 X, J  H6 F. `  |
1 M* C/ Q% W; _7 H
list1 = [1, 2, 3]
  v" Z5 M* d2 T: A- w# @* Vlist2 = [4, 5, 6]% c/ g( x3 G% Z

; Q) H4 k: q/ a& hlist1.extend(list2)) N$ _+ z* U" v( n% d- h2 z7 X
print(list1)4 j+ b9 P  e, P
# _$ W5 E' f8 o
输出:
# B" Q: P& m. g7 }% p  `1 F6 n; U1 ]" ]( G; q1 o# u
[1, 2, 3, 4, 5, 6]
7 @  @' }/ i, K# x6 t0 {1 n% r: b- j9 H5 ~9 i' T. @
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中7 s# F% _4 W9 S- P
! Q6 R/ c3 S* e% _  |
list1 = [1, 2, 3]9 p$ c- Y, _/ X) f
list2 = [4, 5, 6]
8 o  F0 a0 B  D; i0 J* m; C0 ^
3 O) c: b! y0 Z  F2 qlist1.append(list2)9 z1 q- `& q' Y/ Y
print(list1)
2 S# n2 x* ?- @- n2 J) q! U2 t) w  b: p- W$ H2 h0 V6 _% L$ {: ]: s
输出:; X" Q5 p& n9 G) S

6 e3 B) Z% O- Y/ {- }+ }0 w[1, 2, 3, [4, 5, 6]]
  g' r& Q. t* D. Z. J) z9 l" L: l$ F2 i7 E) O) a, Z
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变. ]0 y1 }4 M3 \8 g9 k" P& K

/ D* [2 k- {0 i* Rlist1 = [1, 2, 3]0 R" ^6 o9 w- L2 I/ }5 l
list2 = [4, 5, 6]4 x& u4 S& B3 c7 k. l

/ }: U7 q+ M+ h% fprint(id(list1))
5 a0 {! w' k. z! dprint(id(list2))! Y( l5 |* U2 m; r; f
print(id(list1 + list2))8 K" {9 K7 d% c  \/ z
) `. Y; t  H2 J$ p7 _
输出:2 k; K! ?* K( O
; F' B, g4 C9 z/ m$ z
2680876376448
' T# j1 t. Q$ p2680876376576  r* P) q* a7 s$ B* ^8 [
2680878544128+ W" \/ r$ p, l: J/ U! _# t7 T; \( F

3 b$ x1 X9 Q- {  @, ~9 \+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存7 m2 Q  @1 q) ?( e
3 O& _: ^) |  r. Z( B
list1 = [1, 2, 3]3 u  _$ [7 U+ Z# r( k3 {7 l6 o
list2 = [4, 5, 6]
; k( T5 j! Z% c8 f# _4 @, Gprint(id(list1))0 I# O/ ^5 V+ H( K8 C' b
list1 += list28 f3 Y( e+ D% d; k) B" D
print(list1)9 G  B* `& B& O2 Y  P% \0 y' _6 N
print(id(list1))
% ^9 c! R7 T7 p: E
* B( |5 g2 b8 ?6 f/ C- ~2 F1 T输出:8 X8 P8 V, _& C$ P% v

: F5 n5 N0 R1 a7 {; z2150265921856
0 \& e# X* m. e* I/ Z) z, R% i& V[1, 2, 3, 4, 5, 6]
3 M6 l- B$ S# y5 w7 D, F4 o$ \2150265921856
; O5 i0 f  q, `! ^; r7 _
6 H0 b  q6 \( s' [/ m8 T2 ?& X) ~  h  p# ~
4、特殊的添加方式0 M  ]4 \5 ]! r/ P6 T! |9 l0 j
配合算术「运算符」添加列表' U1 ^# |  |7 P% z$ d
) b/ e% [4 X& X. S2 B% V+ N) w4 [
list1 = [1, 2, 3]) ~& Y$ v8 ?4 ]; N  W
list2 = [4, 5, 6]+ Q8 g7 ?9 Q$ n) N* T

8 u! a; m2 e+ A- L3 clist1.extend(list2 * 2); M9 y' {8 i- Q
print(list1)7 \/ W: h& g$ M, H
list1.extend(list1 + list2)9 V1 B4 N/ c# Z& m/ }
print(list1)) F: B: X  P- n7 }$ g+ U- H+ J

8 z3 `& b1 k' h. |输出:
  w0 g2 n3 y" W8 s8 W. [! `; `# |- J. W( I& Y, Z9 c
[1, 2, 3, 4, 5, 6, 4, 5, 6]
% u1 R, C6 _9 s  O6 D  A; @[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
) p$ B9 M- }/ H. X) Q6 w, D! ?1
# h6 R% E7 G; H* g. G21 q; c, n1 D6 C5 A: ^6 @( Z
「索引」取值添加列表  H. W3 ]% ~( F2 I, g. [

4 F' W, F, ?4 D( U6 C- klist1 = [1, 2, 3]
4 W: Q$ w# \) E4 Ylist2 = [4, 5, 6]4 k0 ]! M7 _9 q$ v6 K
0 c$ L3 U$ t: O0 j" m
list1.extend(list2[1:2])6 I( J4 u% w$ K) F+ P7 ^
print(list1)' W" H# h6 F4 Y9 ~+ p) L% N

1 Z. H' V: V0 f+ E  j. C输出:
2 K' Q! P- r- ]% V
- `( n) o" ~' c. l" O/ q2 ?[1, 2, 3, 5]
; ]& X2 d) N1 P* l. ^; U; ^+ V& m
" v  C9 M. ^0 c; u4 Y) ^# P) c
$ U5 D3 m4 e" T: g9 o1 N$ b- x3 c3 y! V5 ]2 i5 I! p
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-4 01:44 , Processed in 0.507538 second(s), 51 queries .

回顶部