QQ登录

只需要一步,快速开始

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

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

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

1176

主题

4

听众

2888

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解
8 n% e6 m6 l5 I1、可以接收的参数3 R/ f. }" V7 x5 e1 L
1.1、添加字符串
% [& {! \2 Q& V  S" z# Q7 h8 f1 S1.2、添加元组
6 b9 I+ w% s0 @+ x; C1.3、添加字典3 I' [  [8 i6 {0 X
2、原理解析' Z9 V- M; ~% C# R" E4 ~9 [
3、extend() 和 append()、+ 的区别?
0 T' K; \& B% ~; P% y2 @, J  J4、特殊的添加方式
* L3 p  ]2 V/ O8 U  Oextend() 可以在列表末尾「添加」另一个「序列」中的值。% M, s( t1 Q% M
* f& k$ b% ]* U  w
语法3 ?0 k$ d' z( A7 R6 p  Y* n
  `& c: q" r) s% e1 D5 P' {  T
list.extend( iterable )
+ j0 r* X: k- T& \+ H" h
9 N# p% G' x: i* E4 V# N2 Y参数7 o  W) H! e9 q, J4 a3 A

* L; [5 F, J, e, k  O, m* u- yiterable :需要添加的元素列表: K% U3 a$ C7 e6 z& ~/ i
返回值4 N. t2 b2 T0 K

& Y+ {2 s7 U8 O* A" g/ ?没有返回值,只是修改原来的列表
) q- h4 I6 w$ w. K4 C  w" O实例:向列表中添加另一个列表
6 g! X9 M' S; m' m2 l0 |, _5 z' x3 j- m. N8 `/ c/ E: S9 P) I
list1 = [1, 2, 3]
/ G* j" S* a$ C) Klist2 = [4, 5, 6]! W1 `% `/ H3 \4 m7 Q
! t4 o: R  b- p+ x  y6 G
list1.extend(list2)
- r) b4 C; Z- Z# Z- e( `print(list1)2 c' x( ]7 {- l. c/ E1 K5 U
* x! v( Z5 @# f* U  C3 F2 l
输出:, a) `2 ~! n. m, X

3 u$ ]  o# U9 {( g  H2 |[1, 2, 3, 4, 5, 6]
1 h0 L9 i) M5 W  D% B' N
6 I5 P$ v9 H  A
- ^) `; H' N4 p6 x6 {0 _1、可以接收的参数8 c8 ]( W, P: w5 C
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。3 u. a$ v7 `. t" F; y

; C) D4 M/ }' r9 ~3 E! [1 \' ]2 S; r' R8 i
1.1、添加字符串$ K* O9 }0 X6 P# X2 C! g
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。' Q6 J0 O* @9 U

2 N1 z: @$ H& p+ `; \1 d2 ^list1 = [1, 2, 3]7 A0 \! [% z) I& \% q
str1 = 'abc'" b& s1 _7 F7 B# r) w4 N* |
2 n, I3 C3 _, g* W
list1.extend(str1)
7 a# h; ^: [( {3 {1 n8 p$ P8 W  I9 oprint(list1)8 f% `' j6 Q, `: F0 `' O8 E0 C
* E- L* W# L& z4 Y
输出:" g9 e! A) t1 O" f) A

$ z: \' h+ t( F5 l5 D[1, 2, 3, 'a', 'b', 'c']* B' e' I  ?& t

' [- J. y1 g( i. D, \, Z. l# h& K" E* z; d' x  h! [+ Q6 z# i
1.2、添加元组2 I1 H7 w" M6 m2 Q$ c& n8 f' f" X
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
2 [3 N0 W! G+ I$ i
! |$ N4 a7 v" O( e8 alist1 = [1, 2, 3]9 y/ `0 \. P: j. A$ {- N- A4 j
tuple1 = (4, 5, 6)# K1 v3 @/ D% H0 g! _, m0 U* r" C. `
3 S  w, s7 [# [, K
list1.extend(tuple1)
( ?3 a, H7 t- s5 z) s( Rprint(list1): ?2 c3 c: D' p! L

- M! ]& q$ i1 f输出:
4 m7 i! H# j% ?; w: ~, h1 k5 K) C$ H0 d; F
[1, 2, 3, 4, 5, 6]
7 m+ Y( k: m: k9 g0 |7 v7 {  }
' g" \  S# c) ]* {( w) O# M* ^+ Y" V8 F& k) [2 [" b
1.3、添加字典
4 l* U* |6 K7 c( W9 Iextend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。) }: W9 B7 j4 }) M3 n' ]) ^
3 q1 d  |8 ?; o
list1 = [1, 2, 3]! H9 w9 F' U: }6 k
dict1 = {'key1': 1, 'key2': 2}& B) z) D0 x! W" F4 k

6 k: ^8 k) V! k; X! t- G9 |+ clist1.extend(dict1)8 X3 a/ \- v- N: X* Y
print(list1)/ L5 y) u5 F+ w" }# w) n. p

& r6 a$ _, Z: [) x: ?" U! m输出:
9 G3 i; _2 V, q
- j* s" O8 O8 r/ u7 s2 {[1, 2, 3, 'key1', 'key2']
: W/ D: P: W2 z7 B' H
6 P# r2 o/ a4 x# I: f1 ]
/ c8 \7 z+ ?8 f, b  g2、原理解析$ j. Z9 i3 p" v+ U( {+ {
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。! `; g+ L# O% P* z

" J( i( x* k; r0 ]7 e% K  Y# f
2 n5 y" I9 g7 o" D) o* l' I1 D! O& j, f# x! t0 `* m* x
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。  O9 |7 b+ e' y% G% }" L4 f" b
' T6 ^6 T3 o$ s2 ~0 l% w+ k
list1 = [1, 2, 3]
" q, a- F. V2 c) T5 h2 [- Olist2 = [4, 5, 6]
# f# ?& U) W4 h/ a( ^( d( v; q6 G9 b: p0 k: W* g
print(id(list1)); j, r- \- e6 B. p# A+ L
list1.extend(list2)4 d- S* @7 M" \0 _' D5 ?% x
print(id(list1))' L: r- w/ _$ M/ ~. B* l
! a% R+ v% @# k5 V
输出:
) ^) i3 H8 y# _, Q$ G2 t
- S* b9 @- n3 W& j5 t1930566508928
* j5 B) ?% _/ d/ h; C. P4 h1930566508928
4 F& o. W) q4 y. [$ L# Y* }7 G+ [! ]  r' y& y& t  t$ [
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:& o% c6 ]5 J3 ~6 F
! m0 U2 r  Y& I" ?& N1 X) H9 A8 J
list1 = [1, 2, 3]( C: B& ]2 ]3 g' S9 ]) k, Z- u
str1 = 'abc'# P9 P3 J- i& r5 Z9 u/ {

) p+ ^% D2 B4 i. ?5 Q) o* clist2 = list(str1)
; v0 q3 D$ T# k6 P( K6 @6 V* b7 R- lprint(list2)
9 l5 d% T: p& c: mlist1.extend(list2)
9 L8 j! u& \5 U3 ~: Z5 E- d0 i' Lprint(list1)% [! q. R: V- I  F4 @
6 G9 z6 X( a0 `: S* C
输出:
1 Y4 w- y& ?3 s8 S4 _( N7 X' \; i' j9 X0 K! N$ V8 K. Q
['a', 'b', 'c']
8 S; E  n( t; w9 Q- j" ^[1, 2, 3, 'a', 'b', 'c']
6 m4 G/ d; l9 P8 r7 ?
2 a5 g0 ?$ f1 ~1 F2 w0 V5 E7 D4 W0 A/ ?6 |% A3 ~2 \! N1 \+ D
3、extend() 和 append()、+ 的区别?7 U  E7 }! Q! U, P
以添加列表为例$ x* T- o0 l) n6 r: V* U
* x# n( w( W* }' k" t
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中, ]( C/ q  p& m: a: S, j. I

; Y: r& {( Q* }% [2 Y, |$ Q9 Alist1 = [1, 2, 3]4 E  `& F$ ~; V9 X$ i5 X' ~: f* p
list2 = [4, 5, 6]7 V! r' B- B* b4 V! N# B# z+ ?
  B6 [; [# q+ u, U1 T" s2 k2 O
list1.extend(list2)
1 H& i! [; t' |print(list1)
8 y! F- n6 H- ?9 \# K5 c' J: _' ~( Y; W5 v& q) H
输出:
4 q9 ^0 r7 C# E7 N- e: g8 }) e
( A0 j4 Z& E. ]8 D% P4 B* P[1, 2, 3, 4, 5, 6]
# Q" H% ]7 \/ g) _1 j! m
4 @4 z4 I; y+ |5 A/ M" t+ rappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中% e5 z: O9 l9 g8 }

* D$ i8 R1 x$ H1 x. slist1 = [1, 2, 3]
: ^+ M: ?1 ?9 @% @; G1 Dlist2 = [4, 5, 6]5 ?7 Y, Y: S, p. z6 v% ]( j

# A4 @, J9 K, S1 r8 W- Tlist1.append(list2): r8 D7 p* _7 X8 E' \
print(list1)
9 b4 q4 X& R5 u: c# s+ x, k2 `  z2 W; W# n* _# X$ n! s0 m, o( V) L
输出:% ^8 ^6 X4 o/ v) c+ j1 }' \* z
9 E! Q0 W( X! Q: G5 h5 G% A( ~
[1, 2, 3, [4, 5, 6]]5 q; ^, ?# a) q  D/ n$ M. i
7 v5 p  _3 l8 G! U% ~$ U7 U
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变, \' @! X8 k6 i
" I' w; [0 M% H. S  v
list1 = [1, 2, 3]
+ s- l: V% C) a% o  Xlist2 = [4, 5, 6]& h1 U/ n# o% N
/ c2 U0 U5 G) X, L
print(id(list1))
# k; p3 q; f9 i4 ]+ O1 zprint(id(list2))
- ~5 ]' Q9 t, {0 q* }% Q) W  e9 bprint(id(list1 + list2))
+ |5 Q# @% ^- O: |; a# b, ^9 e! `! [/ z
输出:  X5 H+ h+ {" L% x
. y7 w  U5 R$ b$ e/ e6 D
2680876376448
9 b& x% D6 D8 c% A" e/ i" V, \2680876376576
2 ?' V4 D! g  w7 c! y$ J# b26808785441280 [2 l( Z( H" U3 {$ y
6 T6 P( ]# K0 ?4 M7 g- _
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存$ [! s; |) w( s. |/ E
7 H3 D! z2 {1 |' @6 r" m
list1 = [1, 2, 3]4 K/ C" k2 U1 C$ y& D9 `
list2 = [4, 5, 6]3 n+ T: u# h# c1 ^3 p
print(id(list1))
7 w9 r7 O5 t3 I4 D9 L& M0 n- g5 Ylist1 += list2& t; S9 F+ _* L8 f! L
print(list1)
, }6 ~# ?) k0 a: r' ]0 `  V! ~print(id(list1))
6 S7 f3 |, k) t. D% o4 f1 n3 _2 ~7 ?9 P. x% U
输出:/ Z9 m' Y+ _+ n  Q
- T' ]" N+ w8 X) ?% y
2150265921856; r& x+ X5 D( J
[1, 2, 3, 4, 5, 6]+ v- F* L4 o5 P, k' V) B- Y& P
2150265921856
  _5 Q4 ?2 k/ S6 Z. x4 d- ]. t" J. @/ B- u5 H7 e
: m5 U) u9 f$ O& H# C3 Y" D
4、特殊的添加方式
7 d* r! o# Q8 w( v8 R配合算术「运算符」添加列表
# _; W3 e1 ^# s9 p5 w, Y  C. i( k0 |9 U) k4 \  k% x1 @; d
list1 = [1, 2, 3]  m! g& U5 h2 Z4 @$ F
list2 = [4, 5, 6]9 d7 ?& Y* r6 W% ]; K8 C3 z

' D' B; h3 i+ hlist1.extend(list2 * 2)
1 ~8 h( v; C; B2 \2 m; G+ V2 |0 o; Dprint(list1)3 g" g0 ]$ {+ ?( }5 P" ], K1 v
list1.extend(list1 + list2)$ y2 f! G' p! e" L0 J; S
print(list1)$ a% p" z, O1 Z! y$ [% k! t0 }0 {

2 j) d- ]4 Z6 f8 l8 g输出:
  O. M) |) M8 V: N. }( c1 R
6 G& R( o) F/ E9 {4 H9 D2 M6 u* H[1, 2, 3, 4, 5, 6, 4, 5, 6]
6 ?1 H4 h8 `& O$ V0 }[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]. M: |8 E, ]! y$ |) j
1
9 T- Q# h* U' A% }2 t1 Q6 k25 c2 k5 X0 H/ {! ~+ [# ~
「索引」取值添加列表8 @2 b$ d! }- w8 f1 A& V1 J
0 A8 M- P: p! V' T3 m
list1 = [1, 2, 3]
2 U9 Z0 h2 E  H7 I/ rlist2 = [4, 5, 6]
& b2 |: L9 E) }" Z: m% c; u2 N( @5 R& A9 c# a0 R  b
list1.extend(list2[1:2])
4 A& ]3 |0 q3 j1 I( y5 E( \1 dprint(list1)
- Y. S1 m" z6 d' S' `/ }; @8 b  O& Y2 M4 c$ k+ G0 N& r
输出:
: Z( g* r3 N' u' L
- V$ g# F, ~. f5 W% z[1, 2, 3, 5]
& C5 R/ u/ p% h, h1 R5 N0 c+ o7 x4 D- O3 W1 U

8 B  h: N# h% [# Q2 e5 @- ~/ Z; x. L6 b8 o% Z! {' Y( t5 Y6 h2 Y
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, 2025-11-9 04:44 , Processed in 0.841140 second(s), 50 queries .

回顶部