QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解! R  n$ n) b7 y1 a
1、可以接收的参数2 |. W: [! q' {! K6 t8 R  q
1.1、添加字符串5 ]' R2 {7 K- o. j  Y. T0 j: r. W: z: k5 V
1.2、添加元组! l( L1 }! e1 N5 x' @# t  ^7 _2 g
1.3、添加字典- ^2 L8 V/ q2 Y# J+ r* @- ]9 D6 _6 u
2、原理解析+ F- F4 S4 l# ^7 o! S
3、extend() 和 append()、+ 的区别?
) C9 \# t. r* C$ Z4 `' }: [4、特殊的添加方式
) W: n! L$ {! T# l9 B0 nextend() 可以在列表末尾「添加」另一个「序列」中的值。
% j) y( }& U+ l, K" H# ^0 {. @$ y; P% e$ }6 o( ]
语法$ u, z# b- ^4 t# z& s+ m
% X' [# b: r) Q8 l( W: h" r' n
list.extend( iterable )( U  L  t( J2 W; m/ j

. F" X( r3 u9 J5 d# E; ]  N参数
: k7 G& J. X8 |5 z! m5 I% z( ~1 I" K. A+ P& j! _. V" ?
iterable :需要添加的元素列表
9 R# t$ v! \# a) X9 W返回值: I6 A+ u/ ?+ \. F. n

, M. `4 c- M$ `- E! F没有返回值,只是修改原来的列表- ~- v1 o$ b  D7 W3 z* I, K1 h
实例:向列表中添加另一个列表
6 h5 ^5 ~  b7 Y0 e4 e. p, F3 L; X$ j& y# d0 j) }
list1 = [1, 2, 3]4 d- a- _+ [7 X* o  I
list2 = [4, 5, 6]
; t; g5 |/ x4 r4 n. [
+ f$ d3 `8 T0 P+ }: U" p5 c  Olist1.extend(list2)
4 Z/ H( I: I" s* T% N5 Y5 W& H3 bprint(list1)2 G, [* J0 T, ]- a2 ?8 E

! |7 u; y+ T: U) k" V3 I输出:
) G( N. X8 g- |+ }" d8 W1 T
- @5 g9 v2 X! ?$ x; J2 [* s6 t[1, 2, 3, 4, 5, 6]
9 c. g& R3 d7 p. N8 }
9 E, t/ u& _* |6 S/ D9 b$ h: D; `0 [6 X* [" }
1、可以接收的参数9 _/ w6 c9 e# `9 z9 h5 e
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。1 l6 T4 e3 _4 r# U, o

$ J- I# G  `- [: }. w& [& A( P7 ]6 f6 @; J0 |
1.1、添加字符串4 @3 q( F# w: o) B( r) o$ A
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。, O5 \2 A# v( U/ B# g6 c& G
8 t) V, \# A- y% n6 D7 W, A. L& K) n
list1 = [1, 2, 3]
6 |4 H. ~& E2 E& lstr1 = 'abc'8 q* G6 J8 a, C0 _

5 z; W, ?4 }% D, ^5 v( i6 H  Clist1.extend(str1): G4 g! Y' W& B+ S* K
print(list1)2 t- {/ [# D3 `7 t: O

& P' i. L9 A( g. B4 n( P, g% w输出:
5 |/ o# x- W2 ~$ @% T/ q4 |) z0 Z+ @' {- g
[1, 2, 3, 'a', 'b', 'c']( y! S* M  j; \9 ^

2 m" Y: i. `% C6 }; r5 }1 F* M: E/ o3 W. D. }
1.2、添加元组
3 _* w9 w. X' {1 i6 `4 e. gextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
4 m$ T$ B0 x; \
+ W; l; L! [( ?4 Z5 n- nlist1 = [1, 2, 3]
+ }/ n9 t$ ]4 w5 l! ituple1 = (4, 5, 6)
, j' B- O2 R  g0 N
; L) R* H, w2 B$ D% Glist1.extend(tuple1)
$ h7 V& D( P4 D( @/ N( U& o% oprint(list1)
' y3 c6 L# S) u4 P. @
- ?2 I7 I, U/ g8 h# k/ M( k: H输出:
- H. b- l  }! B% a2 p9 T" P6 b- X- c) a7 r
[1, 2, 3, 4, 5, 6]
% J  @- ~' \, r# D/ Y4 ]% P# i  n% I
, U( x" U( W0 b4 K* F
1.3、添加字典, x$ x7 O  ]: ]/ S2 f( u# E  Z% u
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
. b  D% G+ [1 r; L9 P/ _# m6 B  h8 B* W( h  t
list1 = [1, 2, 3]
9 K, l9 W6 I- `  Kdict1 = {'key1': 1, 'key2': 2}. N: k8 ?# b& D/ ~

4 }& i7 t5 y; c2 f" R  w# hlist1.extend(dict1)
; e% |* O  G, b8 e2 B6 p# \print(list1)
/ ]) j0 \) J- U9 y1 K6 C0 V3 }
6 P) W3 h* c3 X2 `0 `输出:$ v. P* N& T' A8 A# s1 C1 L4 P0 C
, ?7 T% V( W8 D
[1, 2, 3, 'key1', 'key2']
, G7 a7 L" }. `9 X, ~  r* ?3 ^" W- S5 E6 Y1 a$ H

2 |% [) B: C- ?2 O& }* |- m2、原理解析( X9 r. A( |. i. P$ ^
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
& w0 P. I; Z, U7 v+ J5 b# O$ r: E7 S* I

# z" X9 M5 y( \2 E1 k& w: n: `8 X" L% {  }$ ~' Y
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
. i* {1 I0 H4 c6 V2 e+ U; l& ], B2 t+ @9 e5 i. D
list1 = [1, 2, 3]; |3 T# `/ W4 C& e- g% u
list2 = [4, 5, 6]
9 R% H1 G6 x. L% h$ a. N0 L* X# C9 b2 A" s% s
print(id(list1))
8 Q/ k7 o) z2 v7 I" Slist1.extend(list2)
9 D6 ]2 E3 w% L. cprint(id(list1))
$ W+ j- _3 F/ O$ D* y# e
. U& s3 H1 j6 z) `# N: L输出:# N) Z5 C/ L4 C" u+ }: ?/ j. y; U

. \  b6 j5 e+ ?6 g  @* n1930566508928
5 ^5 d5 ^. z. y) \5 E1930566508928( N' X6 n: A  Z

. k( Y& q$ `+ f  \" y: S) ^extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:$ F: R4 o% o: X5 U7 J

7 g/ ?% b# k  t$ f5 t* s' {list1 = [1, 2, 3]
7 f& z& I3 r2 dstr1 = 'abc'9 T/ `9 D1 L& f5 r$ ?
- a  n/ H" ?' _0 e9 R) `) g% C: n
list2 = list(str1)! C' Y8 `1 V  v; f
print(list2)" \7 |2 H' Y* ]- U) F9 m2 Q1 g
list1.extend(list2)4 A! F6 T/ _3 l9 n& S9 A
print(list1)2 O) z6 z3 `* b9 m5 i5 p8 j2 p. t) {
% B  S& T( n6 J9 y0 y
输出:" j) M, d6 e- X" j5 D  R, W
% Q) ~/ U' k& ~
['a', 'b', 'c']+ U7 h. H" \5 z1 y# P4 ]
[1, 2, 3, 'a', 'b', 'c']3 _+ L- f8 p6 v+ R6 y
* q/ D* y9 o7 g8 T
% ?3 B  ~# w+ Z- A+ }' \2 t
3、extend() 和 append()、+ 的区别?
0 f, N& @! W* Z# E0 W以添加列表为例
7 ]# L; i4 a! B/ c. r5 P: h  a, {6 L: _
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中6 ^) b: s$ Q8 l1 t
2 U9 B% ?& T3 r$ l; X3 z" W, A
list1 = [1, 2, 3], K" V6 M5 D: z  |1 }+ a' i) m7 u. z/ @
list2 = [4, 5, 6]
2 t) s' V. Z0 ~, [$ @. h7 k' |* E* Q
list1.extend(list2)5 j  [2 S. P1 q6 `! e0 _
print(list1)8 _6 W' I* Q- u! z1 F' z5 J
6 b; w7 Y* X  J# T  r2 V0 S
输出:$ e6 i7 X6 I& d% M1 i9 b
! u* E" L. V/ B4 v: \7 ^* S
[1, 2, 3, 4, 5, 6]
, c7 C- ^2 e- m# r1 p  c! C. |; m: N# p+ O# K$ J8 z7 O/ Z5 Z
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
" K9 [+ J( ]& y+ [6 q! \( t* u* m9 j2 K9 z; F' ^% z* \
list1 = [1, 2, 3]
5 I9 a8 k) R$ H7 g+ @9 Llist2 = [4, 5, 6]- \: k& |( ^! M9 F1 q

8 p" d& \" p0 v/ C; y. dlist1.append(list2): G* e, H9 d, e- ~4 p% }$ e# f% B
print(list1), u4 k0 ]# C( h# Z% o# m+ b- ~
" \; c9 n! q: i& U5 f  ]- e1 v
输出:
: N# l1 p" y7 O4 N. F' I2 [' H( j& @# i: s
[1, 2, 3, [4, 5, 6]]
# B6 G/ K! V5 n: \% O+ x) t% \5 a8 u2 v) x5 H
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变1 K) [) _" @8 _  L5 F1 I& @
5 I. B9 I$ ~% k% k) x9 ]
list1 = [1, 2, 3]6 `' d; W7 o1 G8 H  D
list2 = [4, 5, 6]) }+ Y; ~& R4 ^$ g

- ^5 F6 Z; d9 a5 y+ Tprint(id(list1))% O3 R! F( E7 ~& K
print(id(list2))5 v$ D- K8 r/ z) R
print(id(list1 + list2))9 p5 j- Q1 G, |7 q4 X' A! F
$ x7 S, w4 O" T
输出:
: l3 y6 x7 j* n4 \) V: X9 Q0 l! a8 p! A
2680876376448/ {$ D! K! i9 u
2680876376576
7 p4 O* b: o& w* O6 S  ]$ i) n) V2680878544128: L/ o! G0 V' w6 e' {8 F$ l
$ L7 Z8 }0 d& ?6 d; d7 j
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
$ |2 d; L1 `. p$ A) h6 }8 J3 `. E2 D5 ?. r$ m0 r" P
list1 = [1, 2, 3]
, a+ P) X/ R( e; `. D6 V* W; clist2 = [4, 5, 6]
+ O: \8 y+ H6 A8 P( d* `print(id(list1))( V. r- h* \) a+ t
list1 += list2" ], ^& J+ n. u/ m
print(list1)4 K0 ^. v1 j6 i/ r
print(id(list1))
" w% O6 S) R$ [* ]" N% s* U8 G& u; s
输出:- a. l/ _+ B. j  M: F- V* A

" N1 V7 B9 T3 S& a2150265921856
  O- L3 D6 r, {  Y; O( k& g[1, 2, 3, 4, 5, 6]
/ x# H; T. H( Y* x2150265921856; D7 P, |! Q; t6 m1 q! ?
$ C% T% t, o' I# @) Q' `

( x# I) {3 ^4 _; K4、特殊的添加方式. C6 ]5 C/ Y4 P  P
配合算术「运算符」添加列表4 E/ `- i  a( j; e" G  @2 I: _- t

! b% A! o, c- e5 H' ilist1 = [1, 2, 3]
6 X1 [- ^2 e( Q6 Q- U  Flist2 = [4, 5, 6]0 ^  C$ q# z' E1 u' d* }

3 T' D" o$ c7 ~2 a) C" ], [list1.extend(list2 * 2)
# R( r+ Y% S; a- Uprint(list1)
; M5 u3 j& `! ?; p5 Q, V+ i8 qlist1.extend(list1 + list2)7 `/ Y6 ?% M! V( M; J  l' ]% d! `
print(list1)
/ N. W; z/ }- s; S% O" ]# L; G* `, F  y+ ?- u7 x' D/ O
输出:
( t% u1 K7 u5 |
) M) h" @  p1 W) U  z( i[1, 2, 3, 4, 5, 6, 4, 5, 6]
' G; n, P# }; L5 S% ^( l; ]6 R7 j8 e# a* |[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
: \. K7 c9 }. z& t1
. S& N& R4 G6 O2
3 w! J) O; p& \+ x) f「索引」取值添加列表$ ^5 V5 L) T& _2 s; c. B

; `2 `. S- G- J6 U0 ]- q/ n3 f% elist1 = [1, 2, 3]) i- M) @2 X. |5 K
list2 = [4, 5, 6]" g2 k# _5 [7 a; n
0 S$ Q+ [7 b$ u, @. n1 Y
list1.extend(list2[1:2])' a4 G  U8 S0 N4 S( }0 L
print(list1)
; y/ E; M. [) x% Y+ U, V; o" J  a  ?3 D" V& D6 o1 t2 A
输出:: R$ c7 B, V- t5 m
5 }4 Q9 B4 C+ W1 Z; y8 h. V* L0 Y
[1, 2, 3, 5]
0 q! C. {( B9 |. \; v% Z, q# A( R$ }

, ?! q. w, X8 U: w8 L5 u8 L) r
8 V' r* N  s' Y& H' b. k( T
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-4-14 12:00 , Processed in 0.437377 second(s), 51 queries .

回顶部