QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |正序浏览
|招呼Ta 关注Ta
extend函数使用详解
  }+ [) b9 x, x) P* b* |1、可以接收的参数
: u4 k$ O+ O: b1 C1.1、添加字符串) X: m" w4 q) ]8 |$ h" [
1.2、添加元组, _! d+ o* D* N8 e( T2 z# ?: s8 C
1.3、添加字典1 ^/ d# W& i/ K0 n6 P. R, z
2、原理解析+ Z' T- p  [1 M1 y+ f! u* g8 h2 I" F
3、extend() 和 append()、+ 的区别?9 t( e* j7 ?0 `6 s# J5 @' W, Q
4、特殊的添加方式
5 J; w& T% c8 V" T' j' e  q* \extend() 可以在列表末尾「添加」另一个「序列」中的值。' Y& f& e& w! ?1 ?7 L6 u) s) y6 Q

) o0 P8 }3 x, {$ Q2 b9 D- O语法: w% ~" {3 e) I8 w* m& ^( B! Y

0 g  ^- d# f5 K$ O' d, `list.extend( iterable ); c2 c# k1 n6 u. h6 E

1 z6 ]& I) g$ d  v5 P: Z8 l& v7 _参数& S7 Q2 m, `+ ^" O
5 H/ y+ ?' F/ O% k- G( ]
iterable :需要添加的元素列表
* Z/ q  F5 Z9 X; I7 W! S6 N返回值9 a( B  b$ j% e. v7 }1 f# j
& B6 O- S2 _" d! w
没有返回值,只是修改原来的列表0 Z6 _! a+ T( p- V" X5 |" b
实例:向列表中添加另一个列表
$ s) Y  {& m; L- w* f8 a' ]* d/ ~5 {+ `! R, s
list1 = [1, 2, 3]! s, ?5 `; Y' i# A: `
list2 = [4, 5, 6]
9 ?+ ?) I8 ]/ g. D
4 A" g# Q. w: ]' a* e* i& k8 tlist1.extend(list2)3 J7 S6 K+ T( o. k8 ~
print(list1)# [/ r: v- x1 R; }" I* ?
0 `# v# ~! i* V8 H: O$ z
输出:# l  d+ l& H* L- z2 N

5 n4 \8 a  _$ j4 ^9 p6 }[1, 2, 3, 4, 5, 6]
& {# N' O0 |* P
. g( g; U) P  j- c& D! V3 T4 |3 `7 m+ V0 P1 {
1、可以接收的参数+ s/ v6 l" K6 @# S5 b% G
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。" i2 D1 y" K9 A2 R7 e) X, V7 G
% m+ M5 c  h0 N' y% b$ [

  s5 J2 k4 z$ Z, ^* e3 _$ x: _1.1、添加字符串2 A' I" g1 Q. v
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。/ ]7 z" d6 a2 j: `2 O  |' S1 S" a
0 M6 D) ]" B% {, s# U5 Z6 f
list1 = [1, 2, 3]( Y2 O$ A- P% M5 P/ ]- |+ l) V# i
str1 = 'abc'
3 L% k  A- m8 A9 ~: h4 A; L4 P/ I7 `/ n* u1 y; }% _9 x
list1.extend(str1)7 o& y8 T1 U5 f  c- L! ]
print(list1)' I3 K# O$ q; Y3 d6 R2 N

! Q; a% R1 {. d& ^$ d输出:; |; T: s% z8 \. K1 Q3 X( t

9 ^6 e: ]& k' k; N7 m7 i[1, 2, 3, 'a', 'b', 'c']: L1 I3 `3 `1 b& Y( ]4 o, F

5 d! C5 \5 N2 V$ }1 g( |: |; }8 J, q# t$ B6 I4 M9 j( J
1.2、添加元组
# ~7 v0 \2 P% \/ r, {4 z3 Zextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。+ `0 w% @) S0 @7 b) C
* P/ `$ g9 B8 G
list1 = [1, 2, 3]! h. K( K; E/ M5 n
tuple1 = (4, 5, 6)
4 F' y/ L3 ~" Y) U( I
4 ], z& v' }4 H7 J0 ~2 Jlist1.extend(tuple1)
+ L1 E+ w! C$ _# xprint(list1)
" E; e* j0 a+ G: Z& b0 R& ~, V( X+ W9 F% z% ]; }1 q# g
输出:$ ]4 z, |8 V* j9 Y3 S) @

! c; P! O) Q/ w+ D7 t+ s[1, 2, 3, 4, 5, 6]
0 ~) H: M. z* Q
- T5 ^" B2 p' N: J8 n/ C8 ]
- \/ o$ T+ g6 g9 }1.3、添加字典9 H/ ?1 ^2 A- U8 W. w
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
- o/ f0 d; ~  G( N. ]3 m
0 R* z1 \0 b! z2 y* clist1 = [1, 2, 3]
* b7 C! z8 j  ?5 o) k+ i% ydict1 = {'key1': 1, 'key2': 2}6 R) J# W# H1 x+ a: ?$ t* t
/ I& U. q9 b2 M8 F) w( x
list1.extend(dict1)
0 \$ e4 x5 W5 |5 t) iprint(list1)" H0 M/ M/ d9 K$ r

5 _- D6 j/ @% P% p' t% y6 j0 i输出:3 w  h' U5 F  f- P

4 p( E, P4 X8 r1 H[1, 2, 3, 'key1', 'key2']
* N2 D0 B' s5 d, ~* y( V0 v; k8 R# q/ {
6 D4 O! {, P& T" _& H9 j. @1 m/ ^4 P/ N
2、原理解析" K* D1 Q4 v+ ?" I& b
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
2 j; K& K' L: o  J2 V  R4 o; z. N  t, L7 e  g( P0 j
  K7 G, N, _+ L- s7 X! S/ B
/ v( g+ @- I, }& ~
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
( L5 j; |7 l5 M% l: X7 O
7 x6 ^: T% m1 V  U* n: t1 Jlist1 = [1, 2, 3]
1 z4 Q! S+ }, N) olist2 = [4, 5, 6]: G0 r, e6 k* C# t: R

/ P0 g8 i" E& ]4 @print(id(list1))! r' T' V* C! @% _# P
list1.extend(list2)! c. m1 I$ G% d! @6 v- j
print(id(list1))( [1 t* T- p( o$ G

& ~/ t  e+ D3 e输出:1 G6 P$ l. ~: l+ W
1 L' L6 w* h2 B( G+ Q2 l" `: J
1930566508928
3 b) ^0 }/ \8 K' [1930566508928/ X! ]6 I8 M& l; D) [

! m. m- l. T! G1 fextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:# ?  H+ x. V! k8 Q7 `

3 U2 x% D7 Z- Llist1 = [1, 2, 3]% ~! _! u* O) m# `* a- N' I$ x
str1 = 'abc'
7 S" H1 c# L/ z" _! x& l9 J% i, W; @# @; ~
list2 = list(str1)
: P% p5 w* W8 w: M, E3 Iprint(list2)' K9 |. F/ }/ F* ]# {! }* Y
list1.extend(list2). @' l: z% n5 p* m( @4 l! q$ t
print(list1)
. k4 |" T# N/ X+ |# n1 I6 |3 l7 [: o5 n% N/ ~) m
输出:
1 o- ^$ S5 a% s' I3 f& c
0 N$ O+ A( Y- B0 s1 v- {['a', 'b', 'c']
3 q; |* W1 U+ \5 D. r[1, 2, 3, 'a', 'b', 'c']
3 n" V( ]. X+ E& J. A) o) a" m/ a$ S& ~4 D
  ?+ g4 y$ m( ?# j6 |. j# E5 V
3、extend() 和 append()、+ 的区别?
& Y3 w0 a, T- |& k6 G+ K: h以添加列表为例! {) |' J! R' Q. [

( O& M# [4 Q/ x9 P* O* J( A, iextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中' J, s' w2 Y  I

: L" q! p) Y9 N' V2 [9 H% \list1 = [1, 2, 3]2 i- G* N0 r0 U2 \; o; v
list2 = [4, 5, 6]6 o! z1 u- k8 `

3 F: b. d1 k& @. o- |+ Llist1.extend(list2)
$ @9 Z& N2 u- L* p7 T7 N9 [print(list1)) g6 t& F& ~  H' }; K

8 S' F3 R0 L: g3 Z) E" ?; r  r输出:) n6 G* _* t# p1 L- T. `/ O2 e

1 h0 U/ S# v  a, p) t# l[1, 2, 3, 4, 5, 6]1 @6 J# ]( E8 Y- N8 @& o4 `
1 T3 t" G$ P/ x) h
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中1 m& Y. |* Z5 ^

3 s6 [3 q. L. b, [3 R; _" ~list1 = [1, 2, 3]" X" x  E' \* H1 o9 y
list2 = [4, 5, 6]
8 K7 B0 l1 C0 d) ]6 ~7 F: @8 ]6 D% Z
list1.append(list2)
( w6 U! l4 z' |- P  Lprint(list1)
7 A3 s, r0 ~: \( Z2 B% `/ |7 i1 s" f1 f8 L; i8 E8 X4 o
输出:( y8 Q* D  X4 T) M& |# |; e- y; Y
% I" }$ J. B- v& H* j  ^, ~' Z( Q
[1, 2, 3, [4, 5, 6]]  k; `5 s* q: R( G* Y; Q6 N

6 i, }* {' V0 E8 Q2 r* x) x* q+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变1 P8 Q6 T8 Z$ \3 I

3 w8 g' T* T4 {8 u3 I" Olist1 = [1, 2, 3]7 c8 ]" ~8 _+ Z# z8 k
list2 = [4, 5, 6]3 M& h7 s5 O# h8 }6 w

0 e' ~* z' t9 H7 m% y/ j* }print(id(list1))
3 f1 N4 _5 Y* v* bprint(id(list2))
6 ~5 }# {1 U2 }, yprint(id(list1 + list2))0 ]  \+ {! o7 @

" w1 R% B7 u$ J* q- Z' }5 j输出:$ N7 |# g$ ~9 j- f' U

& u/ f5 P" H* _0 c# n2680876376448% v! K, a1 r1 R& J6 {+ x
2680876376576
  F5 @. u$ y( G% n1 K2680878544128( G* g% P& _/ U0 m
8 h$ e# C) b. E2 j
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
) f  L8 v. z2 J3 ~$ `/ ?3 ]
+ \% u, A7 }! x$ @* _4 Q, x' Vlist1 = [1, 2, 3]! q9 M) D5 c/ m" U+ a
list2 = [4, 5, 6]
' T  d7 W% k# K8 F  Hprint(id(list1))8 F. C+ o) H: K( L3 w
list1 += list2  f3 w, q& X: G/ n
print(list1)
0 Z8 Z  ^. c0 L6 j: B7 y' L9 e9 d; tprint(id(list1))
8 u) Q+ V  F! a
6 Q9 V; a2 E7 H- C输出:( R. Z9 M$ A. D5 S3 O
; u7 ^6 _8 p: N9 r; R3 V
2150265921856
0 q( v# L, c$ @7 c[1, 2, 3, 4, 5, 6]% \0 `* ]7 W+ `! h5 g5 x. P
2150265921856* Q" a# x. N0 A0 I

3 m7 b. y8 f4 Z9 }- f' D& X7 X$ N. S9 I1 G9 ~) B
4、特殊的添加方式
9 ^/ d! _- Z! Q( b配合算术「运算符」添加列表
# b$ \/ c' q* W/ b+ a8 w
  b% u  q& {3 Y0 S+ vlist1 = [1, 2, 3]0 H  W* c3 B$ B" n4 F3 c- i* [- R
list2 = [4, 5, 6]
# w& i6 w, {8 o+ Y; V! u
" O. r/ y! p# L9 n: Mlist1.extend(list2 * 2)
0 i( w8 r3 {3 Rprint(list1)
( G6 m8 J5 j# [% U. X4 v# L' w8 Blist1.extend(list1 + list2)6 z/ d% y2 s$ x5 X. N
print(list1)
6 ~8 n) H# d0 e0 o) S) Z7 j5 p- a2 r/ C' |" C
输出:7 H# J5 ~" i( O' R0 r
: I7 B) E9 b; Z
[1, 2, 3, 4, 5, 6, 4, 5, 6]
/ z! l8 a2 [# L( j% ^& {7 v" d! H( b[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
* e8 H2 F4 d  ~1
( E" f  x+ m4 W. O& U% e8 l2
% n5 s7 h$ T8 `  b+ v: R「索引」取值添加列表6 I- ^6 Q  W& E( X0 q( [; H/ ~% I! q
3 j% T/ i2 E, u( Y! L0 \
list1 = [1, 2, 3]
, B: ~# }1 w: K8 O; @list2 = [4, 5, 6]
9 G8 u1 d* W% f- q3 M  y+ a7 y# B, L
% a! A* @+ q& |# t8 i# Olist1.extend(list2[1:2])8 A0 y2 n: X0 w- _2 k
print(list1)/ D" k' ^! x% f4 i( b: Z
2 q: t3 T1 D2 C$ O: H8 g( D, ^
输出:
5 P8 P# h9 Y% Y" t
5 h- D* @& W) z% c% k5 Z% ^[1, 2, 3, 5]
+ M" T6 M$ g) m: T, D
! A* N. Z0 @6 U9 P8 n) u1 W$ o, ~4 b4 G3 z/ {

; e1 ?) q2 `( K  a
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 01:34 , Processed in 0.411010 second(s), 51 queries .

回顶部