QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解
  U- c- h3 f5 H# {% \# `1、可以接收的参数+ B, `2 u4 f- r8 j$ L* w4 s
1.1、添加字符串5 S4 i! p3 J0 j% q& }4 N5 G1 n
1.2、添加元组3 z! [& N4 M+ w4 @
1.3、添加字典
1 I) }+ x, C; V$ M0 p2、原理解析
7 h0 y/ i2 ]( D: j5 d7 F! a, y9 h' ^3、extend() 和 append()、+ 的区别?
! F+ z: {3 l# n# b3 ~9 g& T4、特殊的添加方式
; \( a8 J5 ]& u  _8 ^; Kextend() 可以在列表末尾「添加」另一个「序列」中的值。* e# A# I+ E+ B' G8 ]
, E7 k1 r9 k. p4 b/ p
语法
/ ]+ B+ }, F" B0 J: E: A) P0 U2 e3 B
list.extend( iterable )( j# [, b$ j" F/ V+ @

! H+ {! `, m4 S参数6 w- v, U  H" `6 R' O; @

% Y6 ^2 ?2 B3 F4 U! ^3 ~iterable :需要添加的元素列表5 l6 s- [6 t: K% M& W! ~, X2 Z. j
返回值2 d& C; W( n' ?! _
' g0 t7 X# `2 X9 L" f
没有返回值,只是修改原来的列表7 G0 V, d4 `% d5 A
实例:向列表中添加另一个列表/ g" D) w5 z) B$ [" Q) ]  }; d

- u, B8 s( [4 K+ J. g/ Elist1 = [1, 2, 3]$ h5 i3 U  k) q8 S. m5 w4 B' w- H
list2 = [4, 5, 6]( ?* I" O8 w6 @. H
4 A& X" E! V: J  \/ T% U
list1.extend(list2)
' E( F4 A! }& A/ g  @; oprint(list1)* `. b/ S: ~/ `  A: ]3 e! ~$ ~2 v

/ X: u8 D' f5 P( F; E输出:
+ P, J" S, _# ~3 U! D, Z6 b! }4 d& b& i2 W2 k, f
[1, 2, 3, 4, 5, 6]
2 j7 z9 p6 z- q- o% v" K* h7 E! q/ ]  Q

( S- n9 D5 P! ^+ C* C1、可以接收的参数5 J- Y! u5 @: a$ S# g: V( g
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
! c+ J" `  F4 J  A9 R1 j1 o0 q2 g. j! S

% I8 z8 K9 S/ j" m1.1、添加字符串
& |9 J4 j. R( W% uextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。! j5 ?  @, h9 Y

2 l. V) q& F; `! h+ A# zlist1 = [1, 2, 3]; V0 ^9 i( V* e- J& {. q
str1 = 'abc'
2 e) d- b: z0 @* o; R3 W& G# ]/ W) S
list1.extend(str1)  Y  l# j. s* |$ J. b
print(list1)7 p% W1 i: m0 d" n$ @

$ g1 U% q4 O( W( v输出:
8 [9 q$ u' X8 e5 X& Y0 ~; m
- Q9 v9 c( H& r) p( x8 T6 e[1, 2, 3, 'a', 'b', 'c']
9 Y# g& u5 Y( s- }4 K9 a' @! t- z8 o& L% w! _' V2 o  w: z7 w

0 K( M4 f& a' M; t4 n2 M1.2、添加元组
: c$ f5 \9 R3 @+ ~0 Aextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。; n! V" A8 I& X* p( y3 K- e
9 p' h# B& k: `8 V5 s  V% F# T2 Y
list1 = [1, 2, 3]
1 x2 [" ?3 }. A9 |9 [, o8 }tuple1 = (4, 5, 6)+ V6 e$ k! S8 t
4 h9 e5 L$ }2 x) r
list1.extend(tuple1)
+ {% X. `- @6 E1 Q5 ]2 |( i( ~( G( e  qprint(list1): w9 x0 v1 W  k# q. V

) j# F) m( o& b. K+ t$ G输出:: x" k, ?+ S( C' z* O9 _0 R

. G3 c! I" n6 {! Z* Q; \[1, 2, 3, 4, 5, 6]
/ f7 p0 ~& b# v/ ~
8 h8 I. y: e: H1 E4 j9 l! U$ |& d/ B6 p3 a# p# q7 s( j6 l
1.3、添加字典, s9 A2 o0 z. M4 @* e
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。3 A& l3 @! m5 m: |; f2 n( f! h& G

% g7 Z  N$ P, Plist1 = [1, 2, 3]
# H; X% r$ @0 x, l/ r7 ]8 E  {5 B1 idict1 = {'key1': 1, 'key2': 2}2 p* M5 ?" b+ p' [
( M3 u) I$ [! H1 p; Y9 I
list1.extend(dict1)5 U* E6 s8 ?" ]! Y7 {3 d4 |" D. S
print(list1)9 |, w2 P( K% k; Q/ }$ T
9 M% @. G% a0 F: J' }8 |! {
输出:
& U- r! y/ Q: {1 u- M. U9 H1 E8 R: M; z3 w
[1, 2, 3, 'key1', 'key2']
# O: L( [- c. O2 Y% D
- [7 }  _5 G' @, I8 r, l
+ y  c6 C3 r% O7 W2、原理解析
2 X3 w  Z, {- y0 vextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。/ j7 D  X9 K8 k6 Y. N
6 F+ {9 Q( S) f. H1 ?

1 R5 O, g8 a8 I+ G& V3 N  E! n- J# g& x" o/ X
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。5 E4 B/ t0 s, |, h  |/ S7 g
! N) s& c% H% _4 B8 f* S# ?- u
list1 = [1, 2, 3]" t& A( c8 N' Y
list2 = [4, 5, 6]& u: c) N5 A, p  f1 E) ~

- Q. n9 f& D" q+ Q4 B2 pprint(id(list1))
, L5 U4 s; U2 O) i" Ulist1.extend(list2)
1 h* I0 t. K  a2 ?print(id(list1)), a6 q1 s! H) d2 O* U

5 U% z8 Z2 h) x( [  U输出:! l* y$ v; h5 J1 m
9 v5 Q6 s) e, ~' F! R
1930566508928+ f' g$ ~, b8 M& `9 ^. A8 L
1930566508928
; H; B$ y7 f& H4 T2 {3 V( M2 Q
$ @, c8 d& d1 T2 [! v5 Bextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:2 y  `  \( E; J6 y$ g
) j* R, R9 r! p8 p# {$ a
list1 = [1, 2, 3]# }& p- C2 f3 N
str1 = 'abc'3 G- X5 ?% A8 @( V+ [  S

& k+ m( N9 M1 X6 I, d. }list2 = list(str1)
0 O6 e( t* i$ ~- Uprint(list2)- X' r8 q5 [4 k* r1 ?
list1.extend(list2)
5 W8 U- m& L5 k6 Y/ s! V$ R4 Wprint(list1)
6 G: l, F4 |- E
  m3 R' G* |; C* ^  Y/ z输出:
9 |# v6 H! f- H/ z$ M  M( V. s2 ^# j# g1 w; N
['a', 'b', 'c']
) O' T& ]5 c* s[1, 2, 3, 'a', 'b', 'c']" E4 E$ s; Q0 q8 K

6 C3 A7 n! d8 Z2 B- ]
1 h. T5 i+ V: e1 o. V3、extend() 和 append()、+ 的区别?% A9 }' M' o  M
以添加列表为例' N8 {( w% |" j% i! v# d

+ ?) `6 R+ z( p9 ~. Q" S$ h$ Dextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
- _3 P* h" e% a' v& y% J9 C; u3 @$ d7 }6 ?, Y9 D, p
list1 = [1, 2, 3]
' ?5 A. M/ s  V: ulist2 = [4, 5, 6]8 Z* D2 z3 R  L" [
0 n3 H0 J9 x+ z, T  S
list1.extend(list2)% v5 D0 _  p0 ~2 b3 Z5 R8 T; D
print(list1)
# }/ m2 l; B9 M$ k7 d6 P
; z& a$ }- t6 j% [7 g输出:( x/ J" Q2 s6 u2 x0 D
+ n) M6 }6 }! i7 R; F
[1, 2, 3, 4, 5, 6]
. D, h, e, G+ V5 H
8 `/ P) b- G0 C+ Aappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中7 C! m- Z/ [& @* T
  \6 Q- N  N* b7 w
list1 = [1, 2, 3]' R  H, k' @# J; y7 J. ]
list2 = [4, 5, 6]
* ~" a9 @% ]- r% b$ h. O& B6 S2 k! r# O
list1.append(list2)
; p5 Q  \. y' d( p$ eprint(list1)  S% b/ A2 V, @0 G2 |) l8 i2 g
! p' T9 x$ G5 ]0 O1 Q
输出:- V3 ~8 h+ S+ o  }( J8 t/ m+ j
5 _5 \7 c- r  ~+ x/ R! n
[1, 2, 3, [4, 5, 6]]# t( Y! N% R  S! C1 N, Y$ I

  F+ K: ?$ |. y2 u9 {/ c+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变5 k9 U' ]* A6 ^% d$ M& _

* A; u  C" Z+ T, B' p! Clist1 = [1, 2, 3]5 d: C& J* N& ^" Z# Y& R) _0 K  x
list2 = [4, 5, 6]
( c0 z+ \+ f& k0 z! N, X2 A) I3 ^
- ?0 c& i: A8 P5 j5 e+ Gprint(id(list1))
5 F6 J" G, l5 c! v; n+ O% m% Xprint(id(list2))
! \' Z0 E4 l! N# t3 L$ e2 J7 tprint(id(list1 + list2))
' a$ X7 @5 S, I8 a$ }# H$ t4 W- N7 W. _7 [. v, u2 }* T
输出:% b/ E! ]- L4 A+ n+ n# ?

4 j* {/ y0 r6 N- ^) g6 Z7 ?2680876376448
( E/ N7 G. P0 ]7 M3 Z8 z, ]+ \2 ?2680876376576) k7 W% z; w; R8 J+ F! E# t" O$ c
2680878544128, n3 @9 h8 D5 m# `7 o2 F
& q0 ?: N& P3 g9 `
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存: T$ ?( g1 }. ]; Q! U

. M$ V- M( X8 [; I3 [2 k9 a, slist1 = [1, 2, 3]7 t# U  x3 r! Z
list2 = [4, 5, 6]
5 T" }+ \6 ^% J- B" {print(id(list1))
0 U% V# Q4 X# z# b" }% Elist1 += list2. x$ {9 |' e, @1 w$ r
print(list1)
$ `1 Q# v. v; W8 ?& ]3 L( Rprint(id(list1))
2 N& f  _5 h- l% m% @" K: }* K: H8 o
输出:
% J( z2 y$ g/ l
+ i7 Y) S4 O2 |! b8 u2150265921856
3 ]- K) m+ A9 s% F, t[1, 2, 3, 4, 5, 6]
4 w2 T( [. Q% u. B- ], W- b) P2150265921856# o3 X9 c/ B/ I  T9 j  T
3 w9 n7 B2 ~8 R) w

7 R, U" m5 Q) D4、特殊的添加方式
# v) B4 o& m+ @, q, z配合算术「运算符」添加列表
: _4 S1 c4 Z# q# |" c$ g1 L0 V9 U6 h5 H3 P, l: V, Y4 H, N
list1 = [1, 2, 3]
6 G7 n' P7 U2 ]% F! Vlist2 = [4, 5, 6]* s8 ?; L3 {1 u, H
2 z: e0 ]3 x2 J# K5 l: l
list1.extend(list2 * 2)% R5 f) a6 u9 a5 [
print(list1)
3 J7 ^; B3 t- ?  Q0 @( m' T7 j/ i' Zlist1.extend(list1 + list2)
  S' ~& Q6 f( U: [print(list1)
( Y# x) x/ D0 P7 h& Y" M( i
; e9 h2 Q* O: I; Y* Q4 V输出:9 Z! r5 S7 j3 J$ w' }

* s/ |! R; i& Q# V8 S  }" S# W! ]' n[1, 2, 3, 4, 5, 6, 4, 5, 6]
4 ^. }* y" r0 Y- A[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]6 {4 r8 Q6 B3 {: Y4 A5 F
1
+ J! t* {+ B" N7 }% H) |" \3 i5 J# g2
- l- g9 ], p3 P9 L「索引」取值添加列表/ B) I% j5 m, M

1 A' F1 P. N8 ulist1 = [1, 2, 3]4 X. b6 U. i7 w3 v/ y* _9 z0 q7 b
list2 = [4, 5, 6]7 \& K' [  m" f, V1 V+ T$ M+ H( C
, [5 c6 m! Q9 i  @# h$ N: K1 i
list1.extend(list2[1:2])
5 F+ h8 y* c9 x' eprint(list1)5 a6 J  j7 Y+ a7 h  b" A/ |
$ w) J0 T, p  X5 L& c# I1 O! q( t
输出:
- s9 H# o' a2 v. {- B
# q& b" D( S8 E6 ?- `  p[1, 2, 3, 5]$ S: ]0 U+ t, M. b3 ~* q

* j- H% Q' i7 \# g* v- K# l, \2 A1 c4 C) N1 S1 Y' ~

/ g# K- \5 A) \) v0 w
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 00:08 , Processed in 0.408648 second(s), 50 queries .

回顶部