QQ登录

只需要一步,快速开始

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

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

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

1171

主题

4

听众

2781

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解! U  E" M9 a+ X& m, m8 g
1、可以接收的参数
3 `0 R+ T/ L7 r- g3 q4 U1.1、添加字符串* A' Y& L9 n( G% Z2 ~
1.2、添加元组
4 K6 D' N( C2 [3 O( I# G1.3、添加字典. m9 l8 B9 u! D$ C- Q
2、原理解析
, K# c( H( M5 @3 F8 m3、extend() 和 append()、+ 的区别?. ?  ^' P! k/ T+ e! J8 |
4、特殊的添加方式
8 k" e+ ]& T7 o4 L8 G) Pextend() 可以在列表末尾「添加」另一个「序列」中的值。
& u* \0 L6 T  J' ~: j' N' S' n+ e& w6 E# p" W6 H# ]8 s
语法# c0 `4 x: z* L! a/ O  k6 K0 Z' K

: n) e3 q& l% m; P2 [" ?3 f# R6 L) Dlist.extend( iterable )
! P# ?0 T* N: w, O& \3 A8 I2 G
% A5 [6 d& d' O# [参数
# z( T' n! u5 r$ K- N, x) y' V. s5 T
! W6 E0 o' u, Literable :需要添加的元素列表3 ^' a' u, c/ n' p
返回值
- p' i$ I1 H5 p8 _! Y
: H3 m8 J! [+ }# }. W4 T没有返回值,只是修改原来的列表1 e  Y8 I1 X: @, h) @7 L' y* ]
实例:向列表中添加另一个列表: _+ ]: ?& v) C' C

  Y5 V$ R% ^# o! s+ s# S* T% ~list1 = [1, 2, 3]7 `& t: y# P3 |
list2 = [4, 5, 6]
, x; e) c, j# i' S8 X& k$ g3 g/ l) I. w. N; g1 J, Q) e
list1.extend(list2)
+ W; n1 c. l& k2 k# r! lprint(list1)% L( `7 Q. W: _+ z* b7 a

5 O9 g+ A$ p9 S1 J8 x5 @输出:
+ R9 L/ B3 W+ h1 u% _# t( s9 [/ @$ W4 J/ i# n/ P
[1, 2, 3, 4, 5, 6]
1 O- R) o" @8 e' L& A) m
9 M4 Z8 V- @4 b. y1 K: i6 @5 O8 P; T, ]. P
1、可以接收的参数
2 u/ w- P" a/ N+ h/ |6 kextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。6 r- t5 e. f9 N- X0 F) `0 p  C  ]* m

5 k& [+ P+ ?' _: D3 b" i; T2 l3 L2 d+ \4 f. U  |$ x4 o
1.1、添加字符串
- q* q' \" d% wextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。9 \: A& U9 L* O' y  y- u$ A

0 E/ X( d5 }' i! F# Tlist1 = [1, 2, 3]
! R7 z- X) }6 b. x4 astr1 = 'abc'2 h5 }6 k; X, I* G* x% i
* D, Q% b5 ?# J+ _
list1.extend(str1)4 B  @5 r/ ]  y. `6 V! K
print(list1)
/ D, R9 B  E3 ~$ L/ P' x8 S5 M& V& L" a3 A- ]6 f' f$ Z
输出:
, Q6 X, J" v$ [4 K' d2 W6 b. a6 @% J9 b- N/ n0 G6 {- w9 x! Q, L
[1, 2, 3, 'a', 'b', 'c']
% L! O' z4 Z, ?# T; a6 n/ p1 g4 \0 |! B9 h# |: F2 d+ }
5 v- s& k9 f9 ^
1.2、添加元组! n9 m5 \- o5 R) @5 l: v
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。( w1 ~$ h" C2 n3 \; [5 v1 {
+ g4 Y/ p6 p- j  f
list1 = [1, 2, 3]9 C8 C6 Z+ A8 y
tuple1 = (4, 5, 6)
1 z7 t9 U7 _8 u* J8 y9 {" D& v& x  _+ s1 j3 ^
list1.extend(tuple1)
, o/ @7 W: s% P6 \6 R, C7 [& fprint(list1). X' z( m% {, b+ v4 N3 B  ~$ D1 Z
9 s! A1 v, o$ R$ F5 Q4 K% g$ {2 h% f
输出:: ?  Y) K" b/ d' [/ K

, c' i" |' B, F$ D  Z[1, 2, 3, 4, 5, 6]& {0 O8 m. D' i5 k3 K& `3 H
1 H4 f9 K  m# b4 d* b

+ W7 P7 @( I* r. p$ _7 m1.3、添加字典7 V- g1 l( d. ?. X) l6 d2 C0 ]! S+ Y
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。( Z! P1 Y( D3 H) B! Z8 ?
# d2 f; B7 \7 G  Z) E* M
list1 = [1, 2, 3]
2 k0 X, ]5 g9 j. Hdict1 = {'key1': 1, 'key2': 2}6 {$ h8 u6 R! y; M4 q8 {

% ?0 V* W/ }+ S; Q; \! F: f9 Elist1.extend(dict1)5 q: Z/ [# a- G4 C0 W
print(list1)
. y7 x$ o3 C' Y0 b+ ~. q( p# W/ y1 U+ G( f
输出:
" B' c3 A8 g% c' `9 V, N+ ~  M4 o; V4 h5 t5 F
[1, 2, 3, 'key1', 'key2']
0 f# y; i) `. H
" s; Z2 U2 q2 G$ y. y" A% ^: y) O5 {: B0 e3 `3 b8 q' `# U  b
2、原理解析. h& `/ B, r. s$ d" B1 m
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
+ O; i( `( {2 m$ P* n5 I
0 A, Y) {2 I. L2 K+ Q' S2 B8 W  a
9 {8 ~. e. R4 L' S8 e2 f1 n
& C" G+ F& w* `  u  J2 H我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。6 T  d/ L& j2 K# f. e

9 j9 }1 k/ U1 q4 R# a+ @4 m! K9 Hlist1 = [1, 2, 3]  G5 ?9 _! o3 h% ^" d9 J/ m
list2 = [4, 5, 6]
' U' h) ^3 }% |$ R- Q5 ~2 v6 z/ b8 m1 r- N& o
print(id(list1))
  p5 T' Y9 M. z( t* `) rlist1.extend(list2)' r( z. X8 A$ e4 f& m0 q# \
print(id(list1))
1 y' J/ h2 c5 l: ~) q5 V+ D/ o% X- w' s# y. [2 h% ?
输出:
/ [4 d. O: H; @1 h% o$ v! D! \. }9 [
2 m" |: h: _0 k1 ?1930566508928: o# P1 k( q& b" J
19305665089282 i7 t% p. d9 O! k8 I- L2 W+ ]
2 {- r$ T3 U5 F6 Q" o0 u
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
1 D% l0 H6 I: \; h2 P- c; K8 d) C
$ e  V* \. g0 Slist1 = [1, 2, 3]
) |. Y0 n2 u+ R1 fstr1 = 'abc'
: f6 w9 m; M1 {/ x; E1 R0 n8 E4 ]6 ?) s" _* ~0 k
list2 = list(str1)
: k. z+ n+ M7 d. _print(list2): ~* [# d  L$ i' ~& z! h1 G
list1.extend(list2)
8 D: _( Q' l9 h# Iprint(list1)2 O- }. ^; C+ P' c/ z/ N* x' F
& k/ K" J. C9 Y5 }+ B2 v
输出:
8 B* k6 d. c4 j& t  C+ S, C/ C! ^  ?0 \8 Q! `* N( B% m
['a', 'b', 'c']
6 H. m4 M6 L4 ~' P[1, 2, 3, 'a', 'b', 'c']1 I  z0 S, Y  H7 K* L6 R) R; Y0 I

( }5 F7 O8 g7 W: Q- |
; [% Q9 P8 r( ?7 P. c# K3、extend() 和 append()、+ 的区别?
9 j' n9 ^+ Z* V/ w9 f以添加列表为例' C' |( X$ I4 `! B) J; g, u" M

$ H+ N: O9 m8 n+ l* \+ Pextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中# J) X; X6 O# r# w# }& {/ O

0 [1 A1 |( T+ b; Plist1 = [1, 2, 3]
4 d5 z* K8 S2 m0 Dlist2 = [4, 5, 6]
3 `2 p8 V) {/ O3 A; \* z- ]
; c6 M- a' D! P: _: L/ rlist1.extend(list2)
7 e: G. P3 ]) S& Qprint(list1)( G; J7 m! U; k3 P6 s3 ]
! f6 e4 `$ C$ g: ~0 M( P
输出:
; E# @/ b$ M) c4 S/ i  |, {
1 s4 Y- O3 B  g+ J* `% n[1, 2, 3, 4, 5, 6]
2 I! `6 W, y* v6 B' p
0 V$ u) v5 N4 j+ U5 V; Lappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
  @! Y% X* }2 n! G" P& E9 G" t: e
( M# `/ h$ r; V( _list1 = [1, 2, 3]4 l4 o; O$ ?4 R8 e
list2 = [4, 5, 6]
: l. b& g1 g" o' u5 w
) g! M: M0 R& B$ \5 ~6 m3 Hlist1.append(list2). ]2 ~% u6 \$ x, ]. Z1 y
print(list1)
6 ~" p. f' M: f9 M( d5 ^2 G: p' s, f0 J* T) ]7 @
输出:
. t5 ]6 Z5 Q( h) i0 H* E4 t' R6 D( @: K8 p8 ?! w
[1, 2, 3, [4, 5, 6]]8 l- x9 `6 R& o3 c# d( t; A

7 J0 x& A7 w1 U9 v+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变6 {! [7 Y0 s) Q2 |2 ~$ L4 \( `

; P. x- v6 T0 i' r" q( e' [/ I4 rlist1 = [1, 2, 3]
$ Y# W& p8 f9 klist2 = [4, 5, 6]$ H( N* k# k1 n+ J
/ d! _1 D& e/ K2 ~
print(id(list1))1 R" s* O8 Y* T& Z" N3 u4 R7 y. n
print(id(list2))
0 B% R+ h6 O3 @% b4 x! }) `print(id(list1 + list2))
$ K* S, g( J- D6 V9 R! X1 p  W0 R/ L; z: d
输出:* b' V  J" d% h0 O% x! n
+ `# e8 |; Q4 k
2680876376448
% v8 J1 Z) U+ m. C( y- f4 `) c0 z2680876376576
: G. D( t( ^9 W2 Y* u, j2 ^2680878544128$ I: N9 m+ i( [& a, P
) k& m. `# w/ m, l, m! o9 j* N0 z1 P8 j5 G
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
( @, @5 M) p; m1 [7 v
% d0 g/ k; s% {( C% }list1 = [1, 2, 3]
9 _3 @1 q" i4 k, h) q, H6 m, \list2 = [4, 5, 6]
& |7 ?% U7 t8 s" gprint(id(list1))
) P' ~7 @: Y1 M3 c$ Olist1 += list2$ f* c5 O( U4 V) u  B( N( N
print(list1)
: u- W- @% Z, D$ cprint(id(list1))6 @3 ~9 M1 N3 `
$ o# D! `. X+ J% s3 l* h* a
输出:
/ ]5 r; M* p5 v, r! k* H$ u" g* F3 A9 J+ l% L5 R4 C! _& Z
2150265921856
7 g8 I+ Q  F3 n3 L1 N) B. s8 ~[1, 2, 3, 4, 5, 6]* |/ R2 r7 y0 F+ {" D4 j$ |' P- F
21502659218563 Q$ l. @. h: N/ L6 F* S. d7 E( j

/ Q7 ]! q; i9 L& V* @' I' a0 ~9 o) a, c1 }8 A: I* e: N/ `+ D& O; D
4、特殊的添加方式
. \: ?" r- N* ]* H/ f) G0 S$ b配合算术「运算符」添加列表8 s( K1 `) E; h' R, L9 |: U1 `; ?

; o! L8 ]; n: I( C/ Slist1 = [1, 2, 3]
+ V: A; [3 H1 _5 X; alist2 = [4, 5, 6]
" A' J0 D5 r: i$ T- e# \0 m
/ T6 l" O1 h  X' T7 tlist1.extend(list2 * 2)% \; x* Z3 U1 a. @$ B: P
print(list1)+ [' J9 ~/ p: ~$ q8 L
list1.extend(list1 + list2)$ T& h- j' B$ C/ N% g( ^
print(list1)
: h& G6 `0 E+ ?8 e( i& `: Z
$ _- u3 H: A" H! U* |' B& J输出:
5 T! v" ?/ v7 B' C' e9 [4 f* H! t: u% {
[1, 2, 3, 4, 5, 6, 4, 5, 6]9 [) }  n+ k9 p) L% m' w( J
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
& e" L+ v" B- r( {) K5 {- }1  w" ^' B* Q' S* E9 A+ Q
2& v  J9 f0 Y& O1 G+ g
「索引」取值添加列表1 ~+ [5 W7 D8 x6 V" ]2 r5 J
3 o! t% @6 i- ~! H2 T
list1 = [1, 2, 3]' `7 {5 K: o9 f: w
list2 = [4, 5, 6]) A# |0 m* u8 R  A6 i
6 L& k+ P6 q, f6 t6 T" m% c5 E
list1.extend(list2[1:2])9 |: k! Q& {- f, b( O: u: v/ u! G
print(list1)2 F1 W  A0 D# a7 ?6 T

/ l6 g7 E# V5 {* |. |) N输出:9 {. ~! `; y( M: {) m; u2 g7 |
5 \/ b+ T: Y: @
[1, 2, 3, 5]
2 b2 ~& M  z6 Z* Z9 m4 _1 s8 V/ J9 z7 Q$ Z5 {6 q! P
) ~2 p& b: e9 m1 e- N
9 ~% R1 M: m5 {% N3 M. o8 [
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-6-24 09:13 , Processed in 0.365943 second(s), 51 queries .

回顶部