QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解0 Q3 Q! m( z5 h  h4 X* G; [( |7 |
1、可以接收的参数
' `  _2 c2 V; ~; x2 t1.1、添加字符串
. @! S. v0 q; Y! _# c7 }; a1.2、添加元组6 k1 e& M# P: U6 O+ K
1.3、添加字典& i6 y$ o2 b6 w
2、原理解析' e3 s0 E+ G9 j: R& M( u3 r
3、extend() 和 append()、+ 的区别?- g" m" x1 u4 M5 ?8 {+ k
4、特殊的添加方式
5 Z! }) |9 x6 x: s! Iextend() 可以在列表末尾「添加」另一个「序列」中的值。
) H- D" }) w' s4 M
8 a6 Y  u" R9 h! t! ^! R语法
" V3 Z& b9 o; [! i$ x( P( R/ f- A5 b* `8 y0 w6 A
list.extend( iterable )  |, B: C- S( ?, Y9 T* A

( U& v. _+ g( f( j; W& w参数
. G3 U. o/ s1 K7 m$ F( _
4 E( `. O; v4 x) ]  P4 K6 y8 a& niterable :需要添加的元素列表$ W1 `" f/ P9 `$ f) A
返回值
4 f; S, D) S$ Q
0 @2 a% ?8 r% p; N6 q没有返回值,只是修改原来的列表5 }- }( b+ {7 V( r
实例:向列表中添加另一个列表& g3 R' m* P# Q* m$ y
- h7 j* Z9 q8 h6 t% f7 J- P' b- p
list1 = [1, 2, 3]
1 J4 B* n5 I5 \! S/ L% ?list2 = [4, 5, 6]
8 o! E5 v: [% W' }( c; `- F) w" P
0 ^! H0 ~! T, ~0 Blist1.extend(list2)
7 o4 F/ M. u6 t" f8 ^& a: h% Iprint(list1)  l( A  I' v4 ^' y
! _: |6 \  P- n! f5 u
输出:
7 x% M) t, L* f3 l9 `7 R* \  ]$ b* B) K! z
[1, 2, 3, 4, 5, 6]
4 O$ D: {; s& v3 B* h- n& V) ]0 ]

; G7 p: N7 `* M! l& {1 d1、可以接收的参数
  Z2 I+ m+ Q7 H9 J/ B, rextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。8 y/ q5 e( A! k! k! `. o! O6 H( {

$ B! d, O& S& M9 d& |* _2 [) q, a5 Y  ^
1.1、添加字符串
6 ^, y4 x2 o. P! O" Hextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
/ W% `+ z/ M7 a, \/ ]* l) G
  n7 `0 q2 D  c# |+ \" Flist1 = [1, 2, 3]$ j. ?* ]- R  m2 U  @5 k& d: e
str1 = 'abc'1 F# H# p; I: X. b% x, X

8 f8 J; m4 |! E9 l" flist1.extend(str1)
" A. M( r' @; H/ A  _$ Z9 X% pprint(list1)
# U# {" P1 J5 q, H1 F
5 @0 ]8 Q9 C) ^输出:# i7 b3 A$ f0 q" E0 X" z

) B4 s$ N; u" |# l/ c[1, 2, 3, 'a', 'b', 'c']
, M7 j! [  y9 l$ u
5 y( o$ S# b) n4 l  t$ A$ x% _$ g( r( B" c& I
1.2、添加元组- e1 q0 w: O" J" t. @+ C
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
" f/ M9 e3 L/ k; d, c
6 g. H3 f/ c. f  R) M9 T/ ]list1 = [1, 2, 3]; U0 R  b- |5 s: M/ z
tuple1 = (4, 5, 6)0 @* Q! v% Z, M: j' U
, i  h; [$ x/ D' S3 `
list1.extend(tuple1)
$ Y4 z* O  @8 |print(list1)) G) Z9 |0 k, s+ e' `
* R1 J: }- e( E' V' p, ?4 R! Y
输出:
, L; I8 t+ m2 L. b  a: T. Y
4 {8 ^! T6 ?( [' D4 f/ g$ M  T[1, 2, 3, 4, 5, 6]
/ `# |6 r- V  B' [4 I0 z1 N$ f$ |/ Y: E( g4 w! g
+ e1 g+ @+ i6 t7 ~8 m9 Q
1.3、添加字典- t% x  Y; t4 L9 n4 S
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
; Z6 F" k5 f1 v! Y! s; F" p6 W5 M/ t8 N# r2 f
list1 = [1, 2, 3]! `! b4 w: V2 j, N, Q: i
dict1 = {'key1': 1, 'key2': 2}* `9 @: z( o9 p9 h  V+ T- w
+ ?' F5 l) F; B% j4 G
list1.extend(dict1)9 A- T: _. r  ?
print(list1)
& F2 Z' ^1 g6 F. \
- D* Y$ L6 R3 E输出:4 h) d& I+ O$ m
2 O. I) ^* j6 }/ d9 B0 }6 ]' O
[1, 2, 3, 'key1', 'key2']
! i! j0 u, U3 ~9 C  Q1 B* R( z7 c, o2 R, s' w7 g4 W

* g3 J. q* y) j  O- ~4 H5 a. i2、原理解析1 G5 T/ U' ]# y4 r
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。" ?7 ^+ L! S' P9 ~# i
# ]3 t& D4 l5 S- ^

! ?% b4 e7 E  y3 }
/ R0 L. t+ Y  c' C+ {. W; d我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。& ?7 X) {3 e4 t. j& R4 X3 C

+ I! ?  l; |- _# |' U$ l8 Klist1 = [1, 2, 3]
" A7 N. l  h5 nlist2 = [4, 5, 6]
( M/ v5 @  \4 d: ?6 R; j+ \8 Y
$ ?$ w# T! i) E' Y" }9 Iprint(id(list1))# l* A& F3 @% B: y% v
list1.extend(list2)
! z% k: Z  V4 i3 s: e+ J4 dprint(id(list1))
) I$ p" F5 Q! q. C0 I
! O. T. k2 Z8 h% i' O9 l& {) S输出:- V' @1 ]$ k% W2 y; w6 P, K. }

8 W5 y+ V; L) p1930566508928! V7 l4 i( b- }( G* v) N( p
1930566508928
- {- z7 |- v+ {$ S6 k: w( ?$ S0 `+ u" a% K" ^9 n9 v1 k
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:& U3 _* F8 s- o0 M

+ u2 g# K* H& h: R7 ?9 Alist1 = [1, 2, 3]+ X" p  U: H( Q; H5 a! U
str1 = 'abc'
& C* l( G3 s; [, h% Y2 `+ F: v% s+ G% ?! f- v* B! p
list2 = list(str1)
2 S1 H" P( g3 x2 M* o8 zprint(list2)2 P$ P7 L  H! u1 u7 U- ]  C
list1.extend(list2)# z& T- s1 |& v1 n
print(list1)
# x# R3 z/ Q1 x9 Y  _5 O6 s
( r, Q/ ^; K& v; `输出:( p7 f% c* H6 g8 K# a' Q

& `: d) u9 w5 Q  n0 }# c['a', 'b', 'c']1 d" ]+ a0 K* E2 v! u+ b9 Y0 c
[1, 2, 3, 'a', 'b', 'c']+ K- a; U5 o- c) x4 h2 G! o: L: B

; C) S; m0 A( L; h! G! C! m# A) T* {* `  N( h" I
3、extend() 和 append()、+ 的区别?- }- q9 j; l" Q3 [4 }0 Q/ }
以添加列表为例
( l, I7 Q# o- ~! H; V  c) H  t6 C0 Q" |8 G8 ^+ Z' Y+ I4 o" K
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
2 V! z' {- f& K* D, b% b' H# G. Q( t+ H  R. w5 q3 q
list1 = [1, 2, 3]
4 |  N# q. P0 n6 a( i3 xlist2 = [4, 5, 6]& k4 }4 H9 V  z8 r

6 e1 Z9 v7 \: v/ s2 s! }list1.extend(list2)
- R2 X! m% O% N* P% I: |9 zprint(list1)
  \4 g  G0 f% K$ V/ x6 R. J( f+ Y- D6 a
6 }4 s; o  h8 D. C# n1 F8 h输出:: s9 K0 y$ Z3 Q* C
* @/ e) @' F. l5 S/ N% ]
[1, 2, 3, 4, 5, 6]
2 P- D, I; x) ~
0 E3 g7 ]' Q3 h" \append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
4 o* Q- Y0 g6 F  u  @$ D: F6 W6 E
4 H! M. @9 n7 n; z( ]list1 = [1, 2, 3]
+ }- l) ], l" a+ s3 `4 P# Z" W( blist2 = [4, 5, 6]
& R+ j, e+ d+ O2 ?# e" \% s! x" Y! g5 [6 H* v
list1.append(list2)
7 {& o7 t( t0 d. g- w; D( Y7 C( N# Aprint(list1)# p5 k0 A# [' L) j6 j- k

# b4 k. c) m, N( R1 q. G; Z  E输出:* d  ~- Y6 r! ~$ w: L) F
5 w. c  Z( ~" @  R
[1, 2, 3, [4, 5, 6]]
( v' |2 g" i; R; x' Y4 a! ?5 V. h6 B: h$ g
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变$ Y+ ]7 ^1 q" m8 |3 L* a9 A

) t# P# }$ B* U2 _list1 = [1, 2, 3]
) p* h% K2 g8 z; T2 D) Y5 @list2 = [4, 5, 6]9 I# U8 ~" O+ W1 K
( |/ W" q7 p. h
print(id(list1))
' W7 j- b/ F. R9 |- ?7 oprint(id(list2)); b( t: U' l. I( h& d' O
print(id(list1 + list2))
! L/ h! G2 _0 e- r
4 i% O% z) ^: }7 }输出:
! `# W9 n% X/ `% m/ C* G
4 `4 c. L! V: k6 k' [2680876376448
. [- \- z4 F7 x( \) R2680876376576" l# e8 d; N) G. I
2680878544128
( g) f( q- k* H% T* D6 }/ S2 }' F0 R! T2 h* Z
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
4 a0 u4 Q, T! }  G9 D
( V  s+ h& f9 _# F' }) jlist1 = [1, 2, 3]; d8 ~' M: {+ P/ e
list2 = [4, 5, 6]
: }  |& S( j! o, d6 a! Tprint(id(list1))2 b7 c! |8 d' Q) d6 F. D0 B& u6 n6 e$ a
list1 += list2
  U6 A9 d; a9 r% _. I& [+ W* Mprint(list1)  F$ V& b, r  U4 c4 r: y! n! r
print(id(list1))8 ~( R: }# e9 ^1 p6 x$ O6 o
. {2 B1 t$ B- V1 I3 q# _) g
输出:: N% h5 R9 \, n4 @. [

! `4 C, A% ]! r2150265921856* M$ A- p. M% |  ?' u* o$ K( a
[1, 2, 3, 4, 5, 6]
' v8 z  @, Q: c/ J2150265921856
8 f$ E) |; _& p$ ?4 \/ \7 b+ E
  b, G& ]* J* k$ @* U9 O& R" n7 u# j5 M
4、特殊的添加方式
: k( q2 c4 N  ?3 A' s5 G1 M配合算术「运算符」添加列表
9 e* G9 u; v& w5 ~% `( }# R
# |+ s4 }3 `8 hlist1 = [1, 2, 3]. _8 L+ b8 ?. H) b7 z* D- w7 ?3 B
list2 = [4, 5, 6]5 Q0 K7 E, `' x* b9 w8 S2 x- ^

% ?1 K# b1 O) _) {list1.extend(list2 * 2)6 k6 F7 \$ |% S$ S( G( x
print(list1)' s$ f4 A' u- H: \& z! K" T2 N5 K
list1.extend(list1 + list2)
3 A. K5 x6 U7 K5 ~print(list1)
$ m; d" c/ F) D( }7 ~) r" {3 \7 u5 Z# f3 ?1 v0 {# x
输出:' Y5 `3 @; ]9 @8 M0 F
& i' F1 O, _# t. d0 G& B
[1, 2, 3, 4, 5, 6, 4, 5, 6]$ f) a' D* z  y) ~4 ~
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]7 v* K4 y% L) z+ W6 S; x  `; g
1
$ e  ]. N" ?4 ^6 l8 n2! z# F* R! T3 G& \' \9 ?
「索引」取值添加列表
( g! f/ _, R; Y$ Y# F/ T
" Z1 G  z% s' v# D6 h  s& Llist1 = [1, 2, 3]
1 k" b$ B, |: b9 V1 T5 }3 wlist2 = [4, 5, 6]1 H( T/ G# T% u
% o. {3 a9 u$ `
list1.extend(list2[1:2])7 A2 _- K9 T# B6 N  |
print(list1)
8 M; Z. W6 G+ y- i+ @8 j8 \: _+ l. z; u! }& ^9 v, N1 I  W& u# V
输出:; c, i5 _) P- `/ I, A4 m

5 N: m' M5 T& G# [# ]0 l[1, 2, 3, 5]: y$ x: p0 |! J7 ?
* l8 g5 R, Z6 L, L
5 O" p5 a* O$ ]% c$ d3 {8 C

- |& V5 j$ B% d9 l
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-10 17:23 , Processed in 0.271713 second(s), 51 queries .

回顶部