QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解
! G8 k; a. g+ ~  t" v2 Q& U1、可以接收的参数
: w2 l$ ?, L$ ^% h( F9 b& q: X1.1、添加字符串* a6 W5 r8 X$ v- e8 s! x8 _0 r
1.2、添加元组" g- N% n* b: M7 d( |
1.3、添加字典6 S- n& x) E! v7 l  N" Z% m
2、原理解析
; }3 a; x, k. `3、extend() 和 append()、+ 的区别?
6 R1 X4 g; r0 A7 E4、特殊的添加方式
) \8 o) d. A* O+ \) W9 {extend() 可以在列表末尾「添加」另一个「序列」中的值。
/ }1 I9 b. X% F5 l7 M! A- Z2 M* v, }3 d
语法
4 h* z" m8 @, l/ j- L5 ^* Y) X9 L
" n$ E5 i4 `" i" k- wlist.extend( iterable ); n2 L' e" }- b0 [9 f2 m/ l
2 U, V/ I8 d' a+ p
参数
0 N: {* H) n. {* N6 d" f
3 N* D0 O, C3 x& u0 V. M: d' }iterable :需要添加的元素列表* R- f( F4 {6 a5 T" X0 k
返回值
0 f. i- @: k5 H1 ~# W* z
2 {6 U/ E5 M4 P6 }没有返回值,只是修改原来的列表
2 D1 L' ~* B# R6 J- p" @/ h2 g# Z) K. F实例:向列表中添加另一个列表" \4 M; p* {& ?' H: B/ i
# l, v# N- c. a) q( i
list1 = [1, 2, 3]) A! X( c/ P2 A/ G) S" h
list2 = [4, 5, 6]
$ D4 i# j$ O8 Q3 e) \3 b' d+ T7 C- t* m
list1.extend(list2)* B. Z9 R- L, F% i0 ~8 v$ B0 n
print(list1)- @* K0 q0 n% W

1 y$ C% L4 e5 |4 \输出:. W, Y* o4 t5 W

0 J. V- Q7 i7 T[1, 2, 3, 4, 5, 6]
1 E, N6 |) A" E3 m4 L7 M8 j$ y: Y4 o; W2 i( q1 D  ]

; b# y+ i) s/ h: T+ t8 D/ X' X1、可以接收的参数
: W& v( {' p3 W1 k5 @; X/ W9 jextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
  X7 ^$ b' y* C  Q; F* y* O
* Z9 |% ^) W+ X4 V/ Z$ ]
% h4 X% x! @, Z+ d! ?1.1、添加字符串
' x& R8 H% z/ i& Eextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
& F3 l1 O4 S' M  ]3 A5 ~' O& V/ D. ?# h! |
list1 = [1, 2, 3]$ x! a/ V6 u) \, D. @# c, H
str1 = 'abc'
+ T9 x5 I6 V1 \) y4 S% |/ P4 \. u/ G- f
list1.extend(str1)
6 ^- v$ f) c- B! z1 K: ?print(list1)
+ ]; y; O: L" {/ s
. b0 \* Z7 B/ a1 [+ v/ }输出:9 r9 @" g0 a! C1 V8 c9 ?
8 h4 ~7 R, |9 B8 S! v- h
[1, 2, 3, 'a', 'b', 'c']) f" k9 M; k$ j+ l# ]6 I

4 P3 ^7 d0 b* u6 ], w1 T$ e9 z
% W+ n3 L+ ]  n3 h( y" Z: H1.2、添加元组
# D) _" Q+ v0 Z" sextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。9 ?2 S' r0 ?) I0 D6 \! q4 C+ X) r
7 o& L  ~0 ^  m) d* @9 d4 h" \' Z
list1 = [1, 2, 3]+ F4 o9 _0 ~, L& k
tuple1 = (4, 5, 6)
+ v1 y3 f  F" v4 j: Z
0 K0 F! y: B9 U* llist1.extend(tuple1)
0 Z* `# v( w! b( W/ U% I, Aprint(list1)
  j" K* o+ P% }6 ?$ ?0 p* R( m) K7 f% Z/ s8 y* {
输出:
6 w6 B& k6 e! y( F! @
; ~/ n( J5 e: Q% j[1, 2, 3, 4, 5, 6]& Z% A5 [2 f8 Y, j& t/ _) a- M
5 T2 \& D. r5 l/ P3 @5 ^+ _

* J$ Z$ I/ X5 ?/ J' F. P1.3、添加字典# U' k) y5 g5 N" F  ^7 o. z$ z! _
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。# K/ M8 A4 L* }: y1 C

+ o' l. C1 i; N4 w9 b# v/ L- wlist1 = [1, 2, 3]( u  x" w: b9 o  F" X2 r. \, S
dict1 = {'key1': 1, 'key2': 2}. e1 S; V) L1 S3 W) K  |1 W

7 K( k- X* e% S. O! i, r- W" rlist1.extend(dict1): P; D7 ^& d+ n; S1 H
print(list1)( \7 I* a/ k2 D8 {1 F

3 b" ?  }( B  W) J1 o& j输出:
% U: i$ K& o0 v' H
5 A; q. t' |( ^! n1 T: B5 V$ H[1, 2, 3, 'key1', 'key2']
, K' ?- j% a" C& R" z, _
5 b3 J1 ^+ l3 f" W
: @/ S) d0 _" z  ~/ W; h8 [- o2、原理解析+ V4 W, x+ y* T, d9 l3 l
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
1 P7 V2 {9 u% f( \' U6 K! w
' g. ?' Q8 |% \5 p: C5 v& i
1 l( e4 \( x6 b6 a8 B. f& p
3 l1 a6 E$ z/ V$ T我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。! S- P9 m# F- J; i; }. {- o- F+ N( P4 k

+ c% n( u) o) t0 Flist1 = [1, 2, 3]7 w+ h) U6 J8 I
list2 = [4, 5, 6]
; {7 A9 b6 {% i. y
# S( d. Q& T& c9 E1 _( Qprint(id(list1))
$ `( E  ~4 M/ r: s) [; i  z' j  Wlist1.extend(list2)  F" E( K' R3 Z, \( {' G  g
print(id(list1))
: t. u2 V' E9 Z( Q! M! |: d9 g  P+ a5 D3 b" Q0 o  D! Z( U
输出:- F! ]. c, c. g* r* y8 h$ i5 U2 E1 v

* x+ e2 {/ g9 e( T) G# ]1930566508928% ~6 p- i; ?  G) ?( ~
1930566508928
4 I9 X* L" L% a, w% y8 P# N5 k) b6 k: M2 i$ F  U- v9 ?9 B# ~6 X; H( S
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:$ Q, I0 V" ]6 n6 g

. c8 P) W- |4 F; Q8 O9 ^list1 = [1, 2, 3]
* i" U, l  b! hstr1 = 'abc'5 K4 n5 \! L7 R8 m3 \3 z* C: X
. _0 F0 S+ A+ A1 C' u
list2 = list(str1)5 I% H1 ]. l- C! n5 E" z) \
print(list2)  Y8 F2 j1 z+ h! L7 _6 x
list1.extend(list2)0 Y8 K, |# C5 Y$ ?+ \
print(list1)( d; w. V# F1 v2 u( ~

  d8 N/ [2 r$ s) X6 t0 m输出:
! G0 k/ X5 N( u2 A+ N1 y( z3 R+ p: C2 j( ]7 x* W
['a', 'b', 'c']
& O  b- v7 }; x' L[1, 2, 3, 'a', 'b', 'c']
5 B, Q4 @$ F; W
" U* E6 V: h7 X8 [( h7 ?0 g3 l! x9 I2 R3 V
3、extend() 和 append()、+ 的区别?0 y7 m& r+ }) {  W
以添加列表为例, _) |0 \# [- Y1 |

$ }; p" g3 v5 c9 Z) H! L# Aextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中9 f  S% Q4 A- D# d, i1 O
- Q7 b9 Q* _+ Q7 w
list1 = [1, 2, 3]  }3 r8 j" _# Z" y
list2 = [4, 5, 6]
0 |6 D" Z) [; g  r* k3 C5 P2 A) e! j; K! F5 }4 \
list1.extend(list2)
& V( ?  e7 M5 ~print(list1)
5 x0 ?* F7 x- W! v, [5 R
4 B9 X; J/ E! z% I6 B输出:  Y4 I; O& ~! r" e1 l

2 x5 N/ A/ F" w[1, 2, 3, 4, 5, 6]
4 U; s. H: d2 a/ Z( w
( C0 G. m1 ?- ^! d2 Y! C8 mappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
- C4 s, W8 F9 l2 D/ u0 T* O0 z+ b) `4 R
list1 = [1, 2, 3]
) W4 o& O+ ~2 I7 Qlist2 = [4, 5, 6]
" L9 [3 p2 N0 d
* F5 b- K- g0 Q6 Q( Slist1.append(list2)
; Z% e! ^) o9 bprint(list1)& T4 Y3 T7 [* t
; [1 {9 K! C- j+ R
输出:( \0 C1 b1 K5 m! t- [! a/ [: F
; H& B" x! [7 j$ M6 }) J
[1, 2, 3, [4, 5, 6]]
& g( b2 m! J0 i) u8 D# w% m$ Z: {0 f( V+ O' r& ?; I5 b
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
: o# q6 W" G& T7 r; U9 G7 j6 C9 B
4 D) {; f5 g- A+ Hlist1 = [1, 2, 3]
5 B" B. ]& \, B/ j) [$ [: i* plist2 = [4, 5, 6]$ G7 m# c! o/ {3 `

% A. m% U' G4 q- j& t+ |print(id(list1))
3 z" s8 l* D6 h+ W4 z& Iprint(id(list2)); w. R. O# n& Y4 v8 f4 I6 `* K
print(id(list1 + list2))
& H9 [, f0 H  L
9 b- i* O! ]3 ^" v输出:
# ~: {# M+ A# M& ]6 [- D2 N- K, F  K2 B7 a
2680876376448
( f  D; }) e! C2 z, {( I0 P4 J2680876376576# V' F: D3 e1 M
2680878544128
$ b" @; P3 V  E: a
2 L8 [3 a! m( [$ i7 X9 ^3 V9 E+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
/ T/ V# \2 h( W' ^2 P6 N9 p, o' a
9 \- q# b4 W) Z1 P  ?$ olist1 = [1, 2, 3]' I/ e3 o6 ]  b0 m, H; B
list2 = [4, 5, 6]
/ y# G9 F9 e" `& Nprint(id(list1))
- c+ u3 P3 v- W( O. M: Xlist1 += list2
& p0 F( T0 |# t. {. R% C/ Hprint(list1), X( h3 Z) ]9 G
print(id(list1))
; Y3 J1 K  V6 _6 j7 h5 \* H7 N+ Q  g% u% x& Q- C6 E
输出:# \- ^9 m( \, e' u" o) a, y2 s

8 h: D' N1 }1 e* w" d21502659218569 p% R/ D. s; c! i0 D- |7 E
[1, 2, 3, 4, 5, 6]
1 s9 ^/ `0 o  D$ T0 V9 m; ~7 R2150265921856, `  v; ?: |# O& V+ Z: e
, K1 w! k' d& N3 ~4 z8 U
( e' ?, ?5 O3 i! p- f% I0 O
4、特殊的添加方式( J; b6 I5 [  j) c/ s6 t$ H/ u
配合算术「运算符」添加列表8 H' H& K; ~, w7 \, J. s8 A
1 O& D: i8 ~  z! S4 G! }
list1 = [1, 2, 3]! T3 v( n! o5 W8 W5 ?( w9 a  Q
list2 = [4, 5, 6]' f! j6 C5 k/ u# z% G
3 N! Z; y" [8 p+ ?3 Q5 R* J
list1.extend(list2 * 2)$ ~6 U, z1 a4 H8 B, H
print(list1)
+ o9 G' y; k' O% z7 M1 slist1.extend(list1 + list2); C5 G8 W7 F! f2 ]$ C8 a) _' A
print(list1)
. E7 m4 N5 I, i. M4 H: V- X) a5 O$ U9 Q; Z
输出:- v6 C$ J0 e2 J. @- L* k8 _

1 M! C# X! f/ k9 \3 i0 n  O[1, 2, 3, 4, 5, 6, 4, 5, 6]* l+ [. W# c& N6 q3 ~! H: ^& R
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
1 o( R# d) x9 p8 i* x1; T3 F) i# A/ v0 b  _1 v# Z' }
2) I, b: ?+ n# l# T( c2 o: h
「索引」取值添加列表
% F; H5 r/ f" _. J+ Q7 c; ?* L2 ?- W) |6 m! r: u* {* T
list1 = [1, 2, 3]
8 @9 Z! e) }  y2 ilist2 = [4, 5, 6]
2 P7 r* s8 B: }4 x& Q% t) ^- Q% i" Q* f
list1.extend(list2[1:2])
$ L, k2 v  h, mprint(list1)0 x3 R7 s: K* }; `: R" C
- D5 o$ @+ L3 j$ F, g. M4 S9 T4 r
输出:  ]. s) ^7 s+ h: B  b

; H7 U; g$ x# L, `[1, 2, 3, 5]
6 }& V9 n5 b0 @5 L: m, i) Y; l  P7 E7 N. y; x
- C* y( U- `9 L0 D
/ x# t: b+ y4 f% C9 d- K
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-6-16 03:12 , Processed in 0.394758 second(s), 50 queries .

回顶部