QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解
+ G% l. f! c0 h) S$ d' V1、可以接收的参数2 T  z; `( @; g; Y, C5 t/ x1 W
1.1、添加字符串
' R' N* t9 w. K6 P, c" R1.2、添加元组7 _% P+ s: Q7 X; s" J$ _' ^
1.3、添加字典6 N! ]0 w, Q. z+ ^6 z6 \5 P
2、原理解析2 L6 @" Q' W! L- K8 _8 j: {' \  f
3、extend() 和 append()、+ 的区别?
/ L% F, i% c, u1 m& G4、特殊的添加方式
% [9 D7 }4 [) H8 r0 |9 i, S0 yextend() 可以在列表末尾「添加」另一个「序列」中的值。2 g. O+ B; h  @: S1 w6 ^, c! x
" e$ g% W. Y- T6 D! M+ C; W0 v
语法' k9 k7 @! M7 i* E4 ]# f- @
$ p- O* \$ d5 T- v0 K  J9 @. q- W4 |
list.extend( iterable )( \; w- ?  }0 o5 G3 c  ~# J1 x9 T5 q
7 N% K0 T  U8 Y4 N' i: l
参数
# @5 L( x5 P' B* r5 m
0 T, D2 J( ]+ z2 K. c  Piterable :需要添加的元素列表
$ \1 Y( R+ g0 G9 V* ?" w# [; ~返回值+ q7 Q& Y7 Z* K+ A: M6 Q

. k9 w) q3 u$ U: U没有返回值,只是修改原来的列表
! o4 n4 g. A; W  @1 i3 E2 @) _实例:向列表中添加另一个列表0 g9 G" h9 J) r4 N& o  o2 P

. s! T7 v8 Y8 M, wlist1 = [1, 2, 3]  T, w; ]( g9 o- [" o, o( S0 Z
list2 = [4, 5, 6]9 a  Y' e/ t  F+ h9 `

! @( g+ t( r4 v2 U' }list1.extend(list2)! i- }$ y. \$ k
print(list1)! w" j+ R7 V% @& a* _# g* d
/ ?1 [* _0 i& d% Q
输出:
' c% @- j& w- Y1 B
) r, L8 W, a3 c; G[1, 2, 3, 4, 5, 6]! M% S' I: h3 ^6 l# I$ U

% ^0 \4 X) n: \4 v! _$ H
1 Y, [$ L0 F' O4 W6 p; b1、可以接收的参数7 a' D, z/ E# I* _, D+ g) p
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
3 [4 M' y3 F" S( n0 S; k' }+ N! c. M# e
  ~8 v7 Q, r2 s( ?' K
1.1、添加字符串/ F, W* j$ f/ p: e( }. g
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。/ f; d# U! I6 }0 j) @

7 A5 i- b7 C$ {; i! j5 T0 d5 @list1 = [1, 2, 3]' B) a. J9 B. L6 e. U) z) v2 K: b: E
str1 = 'abc'7 t3 R2 C+ a6 w5 E

; \- d* T3 o3 P7 N0 W3 J" ilist1.extend(str1)
/ h6 f' b# h5 \0 K4 C% ~print(list1)* z  N! M5 D4 l" ?

" D; T0 f+ G1 r输出:8 I! z1 ]% F# n, l2 W1 p5 |+ f

3 P8 E7 p2 F. i1 y, [( p1 y[1, 2, 3, 'a', 'b', 'c']) w. W/ f2 w8 k# T+ |3 u
1 E' a2 Q/ |; }9 a
* `- z9 q% Q( _  i9 b9 g2 s  V2 E
1.2、添加元组
& n& k+ }) a2 z2 A/ D7 D& oextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。# |$ B' P7 o, n
: D- W8 t( v% f2 V
list1 = [1, 2, 3]
" a9 x2 y# k% Ntuple1 = (4, 5, 6)
; {3 y  j- w8 q; q# M0 C* ~$ E8 H
" m# ?+ \2 k/ L: Zlist1.extend(tuple1)6 H5 @3 e+ p# T, V& ~/ f8 [7 A
print(list1)- ~) s4 p7 V3 p3 D

- P4 y/ |) B# Q, E5 G0 o- `3 b" I1 C, u输出:
* ~! t! C6 v0 \! \2 p/ f1 p& b% [# v9 s* L1 K+ ~5 ]3 I. h
[1, 2, 3, 4, 5, 6]4 {2 ]8 l, j; R& C' P5 E
# I& k- T$ T, l' n9 @2 [

+ T* g$ k4 N- w1 V; f3 S1.3、添加字典
5 Q( J% A0 R  }$ k5 S3 I* yextend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。9 }- f3 t: m" o1 K

/ ]2 U$ f4 i2 V. {+ i5 zlist1 = [1, 2, 3]9 R1 e, m* h9 _9 C7 F
dict1 = {'key1': 1, 'key2': 2}9 r. B, ^& c! t! E" u6 K

# z# Y4 m" u( o2 dlist1.extend(dict1)8 R% i9 `. a, E+ e0 M; h0 X
print(list1)  p- k0 K) l/ p+ z
) {' I( I7 ~" L* @
输出:( Z0 A- i7 {3 s) ~# A

, f7 c) r9 u5 r% A' K- Y3 d[1, 2, 3, 'key1', 'key2']
: F+ [3 _; l7 {3 g0 |; F, `5 f0 H* k0 O' F1 v) @( N
  M8 Y& X% ?5 [; g
2、原理解析
8 ], b8 O& ]- Z4 {9 Z, l  T5 L+ Eextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。7 n. s% {& a; D0 F" s; Y0 s* R5 g
( a0 _( d) a0 V8 R& ]& O5 @# |/ D4 @

- Q+ d# H. x5 H0 Q7 b) m0 _  y- P# x- {! O) y9 l
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。1 y: U, }1 A& H) r( o$ g6 G
9 L) R6 h( K. X' S+ m0 ^7 I! E
list1 = [1, 2, 3]- z+ j# F) m4 G, G( `$ d
list2 = [4, 5, 6]! c1 r1 h8 a9 f! X7 |$ h. i
* N5 k9 z& u2 Y8 |' q4 `  d
print(id(list1))8 F- ]  I7 o, t' q
list1.extend(list2)
/ e8 T& p7 G1 `6 r4 |print(id(list1)). ?4 F; w. w" J/ Y5 D9 e6 I; ^
4 k( ^5 V# D) s' C9 T. l. M
输出:- c( n8 T0 Z9 |" r' }* F1 z! u

) o- x1 n0 F) c  C$ S1 t  P3 M1930566508928
  |5 v7 r, T; D19305665089286 P. l: n0 R5 A, X6 x

2 b5 {9 }) i3 ~$ L$ jextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
5 b) x9 I: o: X5 R1 P- N: c+ F
5 l4 Z4 K0 h- w8 W8 ]5 ?# b4 Vlist1 = [1, 2, 3]
2 j2 M* i; a6 Q: w6 wstr1 = 'abc'
! w$ m3 i$ [4 j2 ~' Z$ e) ^% o0 l- u9 B1 j9 N' l8 r3 b0 d
list2 = list(str1)
* p4 [# j( `* m  ?6 P; X* ~print(list2)
. }- I& U* P# [list1.extend(list2)
) F" D8 h( j' ?3 `8 }( ]9 v! d4 U; Sprint(list1)
! w, L, F9 M8 i* `9 {: \, r) l# E& ?  o$ r0 k( e
输出:/ z1 F( Y$ S- j7 N3 E8 d; j4 W

' N4 R3 b9 g$ d# A" d0 o['a', 'b', 'c']
& z9 r" M# F9 p( |[1, 2, 3, 'a', 'b', 'c']
# Z( n# P2 c! F# v* r+ [( n8 k9 X2 B! e7 C8 `1 i0 x2 z; {
: R7 h7 v; w1 s; \+ t
3、extend() 和 append()、+ 的区别?9 ]5 u; o2 R6 o2 q
以添加列表为例: P: ]( z+ b+ m( F: \$ d

  a' l6 t* B4 o) V% eextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
  p$ v; B5 b  o1 N4 o' q& `. x7 N7 L* O/ N, {
list1 = [1, 2, 3]
+ z7 D$ a5 Z% D, p: Ylist2 = [4, 5, 6]
1 G, ]; @: i' z. ?; g; V% n$ [6 I; T% q- d7 A4 @7 i/ T2 J8 G# A
list1.extend(list2)- u4 h" S, Y; Z' h
print(list1)
, V$ g  @+ E3 g
+ `4 T, A6 ^8 ~' v: K( F输出:2 u! v% L: }* u; v9 t6 Y3 \
' Q$ G# ~. }! B  A6 w. l, y% n
[1, 2, 3, 4, 5, 6]$ T5 \. |/ `7 V! }* O$ s, T
) X8 b! G3 W! F$ S! ~7 S8 d* ^6 s
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中. V* C. q; x& u! a& }) l2 Y" _+ m
1 \' s) |4 `0 \1 s& P
list1 = [1, 2, 3]' a' e2 t9 I- ]1 n
list2 = [4, 5, 6]* r9 |  g  M4 Q( ?* |0 C" O8 l& c
2 k6 w7 h( k9 Z  a0 I; C. H  q
list1.append(list2)' O3 u. s) i- Q, Y7 C
print(list1)
: S& P! v9 i+ f$ h
; D' P7 ^$ \4 a$ s/ i' P输出:, n( z3 B2 P8 ~0 ^
! F  ?  h4 U8 `0 G+ g
[1, 2, 3, [4, 5, 6]]
2 o5 g% O  a3 H" f& _4 R0 ^3 o/ |) B" q1 V: z$ o
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
5 F; Q0 j( e7 s
/ T. @% C! H( q: qlist1 = [1, 2, 3]
7 v( {/ t8 R* ?: B* _1 `7 W' y* q4 hlist2 = [4, 5, 6]
0 U) e: ]$ ]. F! ~! g
, q! B5 f7 J2 x" W" N1 J9 Mprint(id(list1))9 z# c; r$ _$ l9 t0 ^+ u
print(id(list2)). d" t! z- a7 O" |2 w
print(id(list1 + list2))8 W, d. T3 c3 g' m5 I. G# E

* d. D7 [6 X% ]7 F+ Q输出:+ v+ R8 E# J6 j

2 g! X: s4 a* i0 H* ~9 g2680876376448# D% ^+ j  o- Q/ M! j0 R0 L
26808763765763 T' C' m4 n0 T* i+ D
2680878544128
9 Z5 o" p8 ~8 L: r5 i1 l# J1 j. Q! g' |) P, g( p6 b% \" R
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存: V4 O3 p, N. V  }

" Z; ]& ~: h# u0 X' plist1 = [1, 2, 3]
, _6 X/ t$ J* Z0 Qlist2 = [4, 5, 6]. Q; z% u  o. \0 x, E( S& w
print(id(list1))9 i, Y9 x5 |- z
list1 += list2
5 I5 V  f. R: z" E- w# rprint(list1)
3 p0 y" c- U2 p5 a9 iprint(id(list1))
! T2 B: s0 D6 r; e$ w! C& _* ~) h8 U1 R, E$ ^; U( L
输出:
2 O% ^; y, c, n. V& O8 Y5 F" N
( |3 [1 p6 O1 d' b4 h2150265921856
) [0 h6 I$ R7 `6 S$ G2 T[1, 2, 3, 4, 5, 6]
) L% v4 n+ {: [- e& e7 n2150265921856
: R9 O/ C: Y2 T
" C" {. t4 }5 I8 ~- Z2 Q
  P6 Z% q' v4 ~. W. q/ b+ k' z4、特殊的添加方式+ T# q( Q' B) w# K: ~5 l  V3 Q- V
配合算术「运算符」添加列表- t: `/ U) N2 I5 Y) b- {& S
' D$ i9 o; [" y3 ^% G+ K
list1 = [1, 2, 3]& `2 G3 u& ?. n( T$ J* f
list2 = [4, 5, 6]
7 x, W+ v; g  f: t5 Z$ \
" F. c! w& Z& Z: h6 R+ E% plist1.extend(list2 * 2)5 ?/ I( d/ M4 E! b. j
print(list1): V) J) b% P" P+ _/ |% D8 K
list1.extend(list1 + list2)
: T6 @4 i% g$ g9 ^print(list1): _8 Y1 x# l( ?0 `+ Z/ g
' p* F0 m- [6 M* A8 R* x
输出:
0 e- |' N! M$ A% U8 R( V0 Q( r. e3 ^
, l' ~( }4 Z& Z( l  `, a[1, 2, 3, 4, 5, 6, 4, 5, 6]4 Q- Y1 Q2 `3 d6 m( m8 U
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]8 P) x" j7 I( ^, l
1
: F7 W- }" B- c% s  N/ ?26 v7 F8 s: g8 a8 `0 \, H
「索引」取值添加列表# H0 L; S  i: N) Y7 _$ g

; @6 G2 h  Q/ K# }& J# b- I$ j! Zlist1 = [1, 2, 3]! @# s* v# J* o9 ~2 S
list2 = [4, 5, 6]  |/ }% Z0 H  ]4 F  U/ y6 d" |* p
7 V( r, q# n. K0 B
list1.extend(list2[1:2])
2 I  d2 A$ K! a1 o3 I  Gprint(list1)9 `* W; i; C$ ]& G+ T4 W) \' o

3 {. D, M$ p3 G3 q/ j/ U输出:4 X& a8 I: x1 f; s
9 V$ a  L3 y6 p: U
[1, 2, 3, 5]4 b& j" [% {( j5 Z- \& w  a, x
$ q3 h+ v1 M9 g  R
3 @- f2 b8 w. ]( k. q1 L" w

, O* l: v9 z6 A+ N; Y0 {5 J
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-15 20:50 , Processed in 0.392369 second(s), 51 queries .

回顶部