QQ登录

只需要一步,快速开始

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

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

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

1176

主题

4

听众

2888

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解
0 k! V$ D' ?4 K, u1、可以接收的参数' i% j; L+ \; \) Q1 r
1.1、添加字符串9 ^: ]4 @. B& O" F( Y0 W
1.2、添加元组
8 X# G( T* P* l1.3、添加字典1 i$ d7 w7 f' b( P% ]) L
2、原理解析
0 j+ P! R% g6 v3、extend() 和 append()、+ 的区别?* b% S# c+ j# S$ _! T$ B2 o# n. a2 C
4、特殊的添加方式
% Y% \2 ]7 Q/ ^9 _  Sextend() 可以在列表末尾「添加」另一个「序列」中的值。$ M8 |9 Z' T. I; G8 d% C6 I

) E* J' P6 j3 ^' o/ F语法
, t3 d) y# s# j! n) p& z9 B/ S) e+ _' J# _
list.extend( iterable )7 d5 `1 ^0 U: C8 Y4 Q

9 @9 w1 h; \! @4 k) {, P! N参数
% i* ^$ J+ X/ J1 |0 @. p. f1 `0 H2 p% z- Z: r2 }
iterable :需要添加的元素列表2 H: g: f* A9 v' Y2 U( U
返回值
9 ^% L$ g4 @% y1 ]0 M3 A0 S( ?* j5 `, K5 w/ f
没有返回值,只是修改原来的列表
8 V8 H- }) H- ~3 R/ V2 r实例:向列表中添加另一个列表+ Y+ e, `4 p% t, k8 J+ @* t5 J* l

" B' a7 u4 C7 ^' z: rlist1 = [1, 2, 3]1 [5 t/ B" U) j" ^, u$ G0 l3 N
list2 = [4, 5, 6]
% |4 v1 f) j0 B1 h
) b/ u6 m* I& D) _list1.extend(list2)6 J8 Z8 ]( E1 P9 H
print(list1)) l" U9 i7 ]1 V4 M( i( z

% E8 L$ w% x9 v6 {  v2 f7 x' Q输出:
7 \7 A9 i  t) j/ k
. V* Z5 Y6 Q, r: c! K7 i1 L7 a[1, 2, 3, 4, 5, 6]* H, z5 A9 _$ Y8 t% b% G2 E
" M) O0 P+ j0 P0 _7 N# }

9 U! z6 U. G4 V4 V2 N1、可以接收的参数2 y6 O. t3 M; b8 j- a; p4 y
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
" o' b+ Z: o  z% j* C, q
! V/ W' o# g  S  X  c2 C2 V/ \5 g2 }  J# f, \
1.1、添加字符串. Q6 Y: l) j# u1 O
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。+ ^% M$ a7 i( V3 R

1 U1 m& p9 b7 Nlist1 = [1, 2, 3]
( Q" [" X% p; F; J) I9 d, Ostr1 = 'abc'
) J. Q7 Z- s1 f2 p. z2 C
" o+ T' `  J1 qlist1.extend(str1)
- ^0 t# h* H2 r4 d2 G) Uprint(list1)
7 h: C0 y/ V! P, b1 t/ E. c
0 d; D+ }& ]7 D输出:
+ Q+ P3 z) _3 Y* m) S3 Q" {! c( X9 c. G  T$ z  P$ K
[1, 2, 3, 'a', 'b', 'c']
* M* C/ V8 m1 v2 a. s) d5 m; y6 M8 u( I; C5 m
( ]' c7 f; l# t8 Y9 h
1.2、添加元组7 T8 b0 O) T! I  O* C  M
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
8 L* r; \- H. D1 e7 B4 y" N$ a& [$ V+ A9 F8 a3 |# b
list1 = [1, 2, 3]
6 O3 c7 P% q* }3 Stuple1 = (4, 5, 6)' Z; v& X: Z# H4 ?& }; U, b4 A
' s% C# R! |! _. J
list1.extend(tuple1)
" o4 O$ l+ N. p% a( N. s1 i  dprint(list1)
+ e8 K# \+ r/ C( g# M: M! ]+ _' j. _  r( t
输出:/ e9 }2 H5 ]9 B+ x

% P; G/ f1 o0 G; U) R$ S5 ]6 S[1, 2, 3, 4, 5, 6]0 q& k/ E5 y3 |5 g

- Z! S' V1 \- P# P
: r# t; A  v& I1.3、添加字典! `) o' X( y& F8 D0 @. Z% n$ o
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。7 t9 ?4 d+ o. G7 c
! G! \+ h. m+ B# n
list1 = [1, 2, 3]+ t1 q  m2 N8 z1 K0 n1 x8 I
dict1 = {'key1': 1, 'key2': 2}+ d+ r8 s8 v, T

! D2 n  ~8 F, @4 k: {list1.extend(dict1)
7 D( F$ {  l6 p$ ^1 A! Uprint(list1)
9 s6 C9 x  `3 h6 f) |
4 r6 |; S1 {+ @输出:, l$ z: r1 R% Q3 k
" U, Z8 k. |3 g$ U) ^; g" I, p4 q# b, c
[1, 2, 3, 'key1', 'key2']+ P  z, ~+ }1 f! ?3 I" j

! A# ?, h( v- W% p/ n( v
3 F1 b: |1 y6 u- b+ y2、原理解析
3 D% t  ~# A' @3 oextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
' ]& \% Y5 ]" Q# o; d' E  H. d  s* C' S
  W+ _9 N6 s  t" [  m6 |
7 a+ Q9 m& {1 }6 @6 Q. V6 r6 V
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。8 J9 v* e& s* ]$ g3 l! U

7 f2 Q* {6 K& g8 L$ B7 f2 y' @- z! P; ]list1 = [1, 2, 3]2 E( K- h; m' [' Z
list2 = [4, 5, 6]; T! g$ L2 x- R
. K  ~" H; M7 O* {% Y- G; W6 }; F
print(id(list1))
. e. d+ Y9 Z$ Olist1.extend(list2)
& G* Q1 D6 t; Z- O0 ?( ]print(id(list1))
6 e* J; q1 i& I5 k
7 o) r) B8 M- p2 q( C$ i. }输出:
& L1 D, g$ k8 y0 G$ W9 H0 |. q" b3 Q
1930566508928& k* B& H1 u1 B% h( e3 i2 H+ U  @7 W
1930566508928
% Z- u8 r8 e. R
5 ^' U' K- m: N' w* W  `+ jextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
' A! V6 [  `( {/ R/ S% z$ i4 E, V; }% o9 T$ |- d9 V& }! _6 [
list1 = [1, 2, 3]
0 B/ L  }, _2 l- c  [str1 = 'abc'* I) H( |' }5 a# J: V  W' f4 [1 N
3 N( i. G6 K+ ?6 s* x
list2 = list(str1)
# l( w, h$ d2 Y5 W# @print(list2)
6 r) {5 ~2 F8 v- G9 p- qlist1.extend(list2)
) n8 }! F* a6 D, [0 Rprint(list1)
( c7 H; [0 L! t2 M8 m, L
/ d+ l; ~# {& W; Y* t输出:* y7 j& a( }" j0 [% S; X

& u3 f. ~9 q4 f& _$ S" C['a', 'b', 'c']+ ?+ k1 ?" f" w0 B' t' X
[1, 2, 3, 'a', 'b', 'c']1 p3 B' g6 B# K. N% w" a) }
& m# B- ^6 }. ?. X
) T! |2 p0 O9 Y+ A; H8 X
3、extend() 和 append()、+ 的区别?) t8 X: t6 m: f# ^0 {5 D
以添加列表为例
* s' V5 p5 ~8 w9 ^: d/ j' v& r
6 r3 l( X4 o$ E; [* fextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中: p0 V$ D4 f! G' ?( q

& t. @. u$ j+ ]list1 = [1, 2, 3]5 \0 |0 \+ g/ u/ i; d" P& E. d' {
list2 = [4, 5, 6]
1 U. ?9 I' i) _
  }  k6 T" h; I& p1 J5 Z! Ylist1.extend(list2)$ K; a7 K1 M3 L7 B- X& _+ |' G
print(list1)
) Q  e* n7 }( j% k% W3 D
! I; _' Y1 M! D/ t. a输出:
8 I5 E+ q6 H6 Q+ E
! {" {" z. y" n7 |" ^, _$ }[1, 2, 3, 4, 5, 6]/ Y7 F; P$ K+ _+ J
9 g) g5 m' `8 q0 b& i
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中, D# f* L5 ?& ]8 g* k0 H
, ^' Z2 D7 N2 G1 ]& V: x( h
list1 = [1, 2, 3]
& N! \+ `  L1 h. r8 rlist2 = [4, 5, 6]
" w9 A9 J6 \$ Z3 P4 o9 T2 _+ B$ T& I; r+ e# I
list1.append(list2)7 x$ D! H/ S0 o( Z9 E3 l
print(list1)
: e4 i9 f2 p. C# T) Q9 H$ E6 R2 x6 _% [+ l
输出:) `: Z; O& [' c1 W. C

& C$ t3 }: w. b) ^6 p1 h9 m[1, 2, 3, [4, 5, 6]]8 B6 E% k% A7 r7 _9 Z: G( j

: x" H4 {- e7 @& i" l. \" u5 |+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
$ d. V; q+ i: C* y
. _8 D, R+ p4 e1 y8 _* Ilist1 = [1, 2, 3]& H4 u$ G/ J- ?; ]; Q' [
list2 = [4, 5, 6]4 G6 H1 ^  ]& O1 R( ]" Z0 d9 v' x$ i3 Z

& ^  P/ A8 C& {# b* t9 oprint(id(list1))  z/ E* o9 n7 Z6 ^: C
print(id(list2))
5 K: D" K$ S, r* ?% lprint(id(list1 + list2))$ w7 _7 }4 h. Q
% x$ r' J. N  H3 A1 h/ G
输出:# P% Z9 |% i* U# K

2 h! `- ?5 N' v! Y! z: U. x2680876376448
$ D- _7 S/ ^% q26808763765768 ^8 N9 S5 l) l) C
2680878544128) Z) D5 ^  J4 k. h/ {% T- u

- d$ {" k  W& {& x, h+ N. Z1 b+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存) L( v0 U& U8 \. D+ ~: [+ S
+ x( _! Q" M9 Z8 T/ t8 K) i
list1 = [1, 2, 3]
$ P9 E/ A8 a9 r& X" rlist2 = [4, 5, 6]
( ]2 Q9 `9 b6 i& S7 |: Zprint(id(list1))0 _8 T4 s0 f/ s, V- A
list1 += list2
) I% p6 p5 Y6 n# N5 aprint(list1)
) h/ Z' Q/ K% @print(id(list1))' d/ L  ^* Z3 o- s3 @- t
1 S9 X3 K; m4 n6 j. n+ o. a
输出:
) q( O* d8 }& K6 w4 O  _) Q, M$ z* d* E
21502659218561 V0 c: M& l+ ^0 R: U
[1, 2, 3, 4, 5, 6]0 n) w0 ^" M' M( X( ]0 S. {+ k
2150265921856& ?" E5 ]  ^) z1 J2 d. {

$ \0 b3 y" @) D- x' G+ f* \! e
7 F! p, q6 R7 ?* i4、特殊的添加方式  @8 U2 o; p$ n3 S+ T
配合算术「运算符」添加列表
7 {/ |# s; c. Z% h5 m4 s, l6 R7 b( B
3 t8 s9 g3 j' K( Y1 _list1 = [1, 2, 3]8 R7 s# J- E+ w
list2 = [4, 5, 6]) l6 L8 f1 j" i- w, @

! _( L# E; z* xlist1.extend(list2 * 2)
# a5 q6 A& G4 X# z; L  |6 ~0 Kprint(list1): w* e5 [) Q; Y9 b3 Y. X, r
list1.extend(list1 + list2)
4 v+ p7 a3 p1 r  Tprint(list1)
. F8 o' b1 |. O" j1 ~! _1 P# N; [) v! s4 |
输出:% `$ S6 I7 @. F) v3 j+ n/ h

8 o+ ?/ P) g- y5 F: L[1, 2, 3, 4, 5, 6, 4, 5, 6]( {. g5 b' |- M, A' V( e
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]; E8 J5 e* B  x2 O
1
$ r/ i! T' c0 h' K2
) g7 g6 ?8 N* t- @5 k: F「索引」取值添加列表
3 `" T/ y; P: f0 |. v% U/ M( E+ h5 ]$ b7 L+ ~
list1 = [1, 2, 3]
- V1 H/ Y2 E4 n! I, G2 L: W, {list2 = [4, 5, 6]
- U0 w  O% m. N) A  l2 W
6 ~* l( l+ J* ~$ |1 _2 Ylist1.extend(list2[1:2])
/ B+ D+ h" D! @4 Pprint(list1)
8 x% ]7 k0 M4 ~7 ]) N3 b& V1 o5 o7 O1 x8 z0 v3 d
输出:
9 r; ~0 U7 ]' i. I& L' f4 f! V; n+ b5 ?0 j! q1 ^
[1, 2, 3, 5]
7 C% B! G0 q( K. ]# p4 a
) \$ R; y2 F9 }5 d) w6 T3 _% b
3 p$ l% E% V3 t3 E% Q" {$ k0 J- {. O0 _% j
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-8 23:42 , Processed in 0.451568 second(s), 51 queries .

回顶部