QQ登录

只需要一步,快速开始

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

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

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

1176

主题

4

听众

2888

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解: s! g( g- n/ O  ]" r8 w4 e! [) ~, s2 S
1、可以接收的参数
' u( t% d% ]: }/ u0 V1.1、添加字符串4 P. }3 T6 ?9 A1 Z
1.2、添加元组
( a; y' D# U8 i! Z0 G1 {3 x1.3、添加字典
6 A! |3 D2 u- v4 K0 o% g2、原理解析
7 k) J% F$ w: O2 S6 F! o3、extend() 和 append()、+ 的区别?3 i2 L+ ~* b8 ~% a
4、特殊的添加方式
- o: Q, e* W! }( p: `6 [7 e) F, @extend() 可以在列表末尾「添加」另一个「序列」中的值。
  r  O1 j$ H7 ]+ t6 X
3 y- q! m% h) K4 c! ]' C; ~. V# ^语法
9 H% X3 @% s+ q3 W: U
( I- M0 Z# E3 Z  x& Nlist.extend( iterable )* B" U5 R+ }3 h" g' m$ j

2 t2 ?: O' `+ M, n/ @0 h6 {) }5 C参数
* _9 [! n7 Q' i1 h0 k
4 W6 @3 m9 r! T) Eiterable :需要添加的元素列表
) C3 z7 x' H7 z2 Z# V' @/ y返回值. b5 X5 J! x4 j& u3 n

8 K7 z$ }) ~6 {: {6 ?5 G) p没有返回值,只是修改原来的列表
9 {% v4 A+ `4 V3 `  q9 p实例:向列表中添加另一个列表" J- l8 M9 X2 f2 @
5 y" i& x# V, J
list1 = [1, 2, 3]) `: Z1 U% H: w" A
list2 = [4, 5, 6]7 W, F) d! ]# ~2 M" t  A* p

) o7 `2 a2 z# x0 {$ tlist1.extend(list2): g+ ^2 S6 U. I8 h* N
print(list1)( Z" n$ C& v2 t; a

* t- l$ p+ M' m" N  D输出:8 }  z3 `8 B2 }3 v! z1 |$ d7 E1 X
! s$ @2 v, B- Q7 j; t, u, |+ y6 ?+ K0 q
[1, 2, 3, 4, 5, 6]
& ^4 t! u; j1 w5 h9 E5 X
  B) |  u+ A% B5 X# ]7 r, `* W3 j, c' h. q3 @
1、可以接收的参数
5 L$ I2 `$ m2 i- N8 {! s8 r7 Aextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
6 N0 K% c0 A1 \) J, P  p7 _* q) S1 R, |+ L% H% ^& g% l7 j/ a5 L
# p! p, u: {/ }
1.1、添加字符串; e% G2 |4 X' [, C9 h5 z0 r
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。# J5 K0 g$ f0 W' ~7 i0 R- |. h
) |2 P2 U$ c4 n' K, c% Y( I. ^5 R. M2 S
list1 = [1, 2, 3]' x2 J! x6 y0 p5 ?) h
str1 = 'abc'
" W2 Q. q  b" |' |8 U' l
  h5 G6 W1 G! elist1.extend(str1)
6 h% u+ c2 R6 F/ H, b, _/ L: H7 Sprint(list1)% z5 [$ g; s) e* w
/ U' G0 h, s) k% ]4 P+ d
输出:$ v/ y! v4 J# u$ ^, g, _
. P3 g' Y) E$ I# Y' f+ W) w
[1, 2, 3, 'a', 'b', 'c']7 q9 d3 P1 c+ ?
# h4 s3 z2 u+ K# o* p9 n. i0 W

. B9 y9 h" P1 J( t/ t9 r2 d1.2、添加元组: q( J2 D" O+ A- g2 J* `6 i
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
( f/ |. v/ b: d* R' l0 r  |7 ?  t% j9 Q- u* z, U5 c( c
list1 = [1, 2, 3]' |* c& t: L" s0 t
tuple1 = (4, 5, 6)/ r6 W% P' B+ X8 {
5 q- }2 n( J' N4 t
list1.extend(tuple1)4 D( X3 f! h: \3 `. h! e8 L
print(list1)4 f5 L3 G2 s1 g/ O; @0 W; Y3 [
5 e) U7 p& }# i* k/ \& n7 {
输出:5 W" B# |! K9 J4 h
* F4 |  z9 s; M: R- D
[1, 2, 3, 4, 5, 6]
- e9 ^$ g+ _& {5 V3 U+ Z5 b& h& D3 z* _: |1 @

0 G) Z5 b; Q4 q8 T: F  E$ w$ h+ A0 b1.3、添加字典: f. J. u0 Z* T+ w9 L, N0 {
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。- C1 g4 E, {4 \3 b: W2 a; f- M
7 Y* h8 g0 g& i8 V3 [5 ~
list1 = [1, 2, 3]
) E& h# r, y/ N3 x: }: edict1 = {'key1': 1, 'key2': 2}
, v" i3 ^' w7 w/ Q: N) S; [+ v! D7 S3 a  G4 j
list1.extend(dict1)0 z/ b! Z- Y) s8 L
print(list1)! l5 k1 H1 c+ u- _0 d* ]1 _
3 y9 P: t4 N/ [1 ~1 Y3 ]
输出:, g; o- X: @$ F! Z* @' P
- t' e8 a2 ?" W2 c7 A0 d- _4 L
[1, 2, 3, 'key1', 'key2']
8 h5 ?# ~% I1 V1 i6 q
) Y3 ?( x$ F. d3 L* [/ x) A+ ]0 e4 _4 S: V3 l' y* q2 Z5 D5 K
2、原理解析* r8 p" s  \4 ]) I
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。8 K, U' F$ R- {! F& B0 @4 O
2 Q8 p1 R) P  g1 J2 _1 ^+ ?

% {" K- g6 h1 L8 S/ z4 X; X2 s- s
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。" G3 W, Y6 n. k: F1 d, q0 Q
7 s& }( g! L( o$ F+ f- i
list1 = [1, 2, 3]1 o  Y) P, X' s* O
list2 = [4, 5, 6]) W4 e3 O7 |: Q  _# g5 r' L
: _9 [* @* A% U  @' \! x
print(id(list1))6 z) S* P+ y2 l: S& W8 Z: f) s, X# A2 o
list1.extend(list2)
' _7 F( u; O8 K- Q2 K7 I6 aprint(id(list1))& S$ p; ?( p6 Y% Z$ V7 f
( j/ n! c5 h) ^
输出:
9 t; {/ ~5 G7 C0 n: n* F' M& R! J" l5 C
1930566508928
9 Q+ M  }6 l# f. v- t19305665089284 h3 c% x6 k6 v( p' k* M8 E: U4 B

) q& l5 B+ L  n+ T/ i! A% q; ?extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:* H% N, Z5 [9 ^9 C/ Q6 T
& k. V' u2 h5 z/ p/ V9 W3 r5 c) U
list1 = [1, 2, 3]
0 }' g1 b( R7 G5 Y: ~. l: h$ H7 Ostr1 = 'abc'
1 Y1 T5 t/ T8 B9 U; w
9 f' t4 [2 \3 C7 ~; U7 Jlist2 = list(str1)
" W; P6 s5 d5 W2 m( w9 Sprint(list2)
3 I/ ?9 s  R" ~$ N3 Z, C% E6 Plist1.extend(list2)
7 E5 e7 z  Y7 E" u+ l& c; ?- D& `print(list1)2 F$ c6 O" A' x0 a' h- W3 l
( _. s( v+ v, b, T; {4 p0 K5 u
输出:
' c! k7 ]. S8 E; d
0 L7 Q  K1 A# l' M4 d( @+ U- Z['a', 'b', 'c']8 f( L7 V  s3 ~9 E
[1, 2, 3, 'a', 'b', 'c']
( \$ l3 E2 K6 {; L2 A8 a
; X' z) M! j5 `& D( i" g7 K& f  b5 K2 y, m' g' B6 i( F" Z% M
3、extend() 和 append()、+ 的区别?" ]- k1 e. c5 G" I/ B
以添加列表为例
, L, `% ?0 e: d/ r. e
( u8 q' F* m/ m1 Iextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中  G# W2 U0 I# \$ J' r. k
" M# n! Q4 t$ c( c+ v# p
list1 = [1, 2, 3]2 z0 h" ?7 C' B+ {2 }3 L
list2 = [4, 5, 6]
2 z9 i  _2 p( L3 b7 B3 Z3 c
# U8 O. @* y! J' \list1.extend(list2)
7 {, q; ~4 Y' f2 g4 vprint(list1)! G7 G  J: m6 c7 q$ I* |

) z, Y$ O! Y% r+ \6 N9 f输出:: s1 E1 T( B8 t# Q4 W
9 o0 j  f. `( v2 R7 @) Z
[1, 2, 3, 4, 5, 6]6 A4 M+ z* \6 N% A) ]8 P" i
3 V2 n( I: l) R6 \$ N. Z3 @% Q% [
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
# L- d5 r9 p# {4 Y" R$ a
8 I8 A' X9 _. S: {& Y3 I/ ]% {list1 = [1, 2, 3]
- |1 m8 z/ |0 m/ O2 U- clist2 = [4, 5, 6]
/ Q* H2 g& J3 f* h3 I
2 N" E9 `" b2 e9 A& G6 ulist1.append(list2)$ r9 l2 K7 G6 @( F6 C7 a" d/ x
print(list1): F; r3 @! C! Y

, n( x6 m# K: y1 S( }输出:
; S' {/ G) e6 R# L/ I2 k4 _5 b. H4 `2 r$ c6 }
[1, 2, 3, [4, 5, 6]]
  Z( F5 r+ t* p* j, f  S: v$ N, G3 N5 a. ]8 O
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变6 g* g% a% _- ~% V
7 [5 ?% x) s9 C  N1 f! t
list1 = [1, 2, 3]
+ i, U* S' N# I7 R8 Tlist2 = [4, 5, 6]
1 ^. `, g: p5 C+ ]* K) S
  x. q, D# ]9 }; p. _) iprint(id(list1))
# f8 P- Z& r: I" a) n6 M0 e) iprint(id(list2))5 D7 F! _6 u% j4 o" ~* Y
print(id(list1 + list2))
7 l: l! e$ t/ j: D, s+ Y9 X- L4 ^+ n9 X; G/ D, S
输出:
5 D5 b/ m! I$ ~. V( p  @$ c2 _1 H& B' C
26808763764485 K. W' T$ k3 P9 a6 S: [- j! S
26808763765767 M; [& R6 X! N- E% j# h
26808785441289 i8 e6 }4 F$ K( s( }9 e" H

2 i2 t5 w" G9 _" d  g+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存( z' k  V; `2 l6 \/ ?7 [  ^& ?

" v, H& J/ J  r0 Plist1 = [1, 2, 3]
" I$ _0 M" \; y. N/ i5 _list2 = [4, 5, 6]
: j* q$ {8 O& Fprint(id(list1))
6 w2 }- C9 N, glist1 += list2
# Q+ w# g# H* Bprint(list1)7 o3 e: d( d' a( V
print(id(list1))
7 u% w- d* B/ h  R
4 e8 v2 _5 q# L& v/ Z' d2 H; |输出:( Y/ Z0 j$ D$ r7 X7 C' A

6 a1 o6 m6 L9 Z1 C) V2150265921856; O% ^1 j, ^, F; H% X
[1, 2, 3, 4, 5, 6]
0 _1 F& g* E) o% j' n; h21502659218563 U7 @. x9 r5 d  N

% q8 M* l/ q2 q5 A2 y2 [* B( d9 }# c, P" v& F( z, M; [4 P' N9 v
4、特殊的添加方式9 W7 Z7 ^5 v2 q9 x9 Z
配合算术「运算符」添加列表, r6 C( T. h6 E% S" p- N% z8 T

! M) C6 s& T1 O, E* s# a. Ylist1 = [1, 2, 3]( ?: ~5 {( d& Q# c6 x9 |
list2 = [4, 5, 6]1 j% w2 u: Q* Z+ u7 I; g3 a1 E7 `
6 U; C9 Z7 u5 g
list1.extend(list2 * 2)$ Z2 [% V  D) k6 d( O$ G7 c
print(list1)* P9 H4 k  h7 I7 `& C
list1.extend(list1 + list2)8 z5 A2 ?2 M; S
print(list1)$ q+ e. d' X1 B
3 [6 |# L' r* P) Y
输出:
! J" A) [8 `( }0 l$ q  f/ m  Z. z3 p1 n1 P- S& I: A2 N/ [
[1, 2, 3, 4, 5, 6, 4, 5, 6], [3 k9 z4 m( l3 @% @0 Z: e
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]$ S5 F/ K5 X9 |% Q
1
; Z) R3 u2 A: C5 ^8 ]2 W2
. Y8 f) u5 J# Y) h, Y- @* E「索引」取值添加列表4 s' O6 n. A: |! J# F# D8 v- H

$ L& B; P: B- r6 s& Q( h4 blist1 = [1, 2, 3]
7 f. t* ^2 r' w% Hlist2 = [4, 5, 6]
: h! w; P4 [2 r
% W  D- E" M- v- M  N3 Tlist1.extend(list2[1:2])
% I3 N% a- T' vprint(list1)* C. x) a! v/ u4 L8 h5 M+ x1 s3 h
$ ^( n1 P# J! T; O0 {5 z( I1 S) p
输出:
/ ^# p/ R: {) v, b7 H
; W# U* H* t0 `0 l  j/ ?' N/ i1 l3 U[1, 2, 3, 5]
; D3 b0 g9 I6 C4 B6 m4 w: `4 w6 i+ ^% I8 p' \: w
9 p& d, [9 j' ~: O7 a  B
/ S1 P- _& w* p9 p
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-9 07:30 , Processed in 1.595263 second(s), 50 queries .

回顶部