QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解
- K- Q7 k9 X3 j. r, \" E$ R8 a. X1、可以接收的参数
1 v1 O* s0 b. a# {, P/ V! i1.1、添加字符串
+ |5 s" k6 R7 E1.2、添加元组+ T# p7 y, \3 q0 H) S0 X0 a
1.3、添加字典' ?8 N2 X) w) b0 M9 r+ T$ d3 H
2、原理解析/ f7 E" N* b- [" M  R
3、extend() 和 append()、+ 的区别?, A$ m$ t+ K' A3 P- S
4、特殊的添加方式
% h+ f  Z0 V" H# x. L( Q& [extend() 可以在列表末尾「添加」另一个「序列」中的值。5 b: r* e. \) |. F

; D& w- `1 w  j  p  p语法
& L' ^" D" j  L. @# s4 Y; m$ S" \/ j
list.extend( iterable )6 L. i0 a) S3 ~* r2 M2 S- e" o+ V
$ D# \# F( R, t7 v. |4 c" C
参数
& }" Q+ `$ M7 B9 y2 Q7 \4 w3 M+ v- b
iterable :需要添加的元素列表
; H' ?2 F5 B) s4 v返回值/ I2 p9 `, u& G& T: Z5 J

) |5 l# k5 Z# k; n没有返回值,只是修改原来的列表  V3 H( B/ x' v8 W6 ?: J
实例:向列表中添加另一个列表; c2 T8 m7 P% z% B2 R- A

* m) C% ?9 `& `% P" g' llist1 = [1, 2, 3]
1 f- H" L9 U( Z" l" }1 V8 s3 X! c! n& {list2 = [4, 5, 6]/ Z" _8 d) k  D1 e0 ^( K% n! @0 K, t

+ a, H5 x8 w( r+ [3 y0 Olist1.extend(list2)# m4 l) J8 D: s) L* P% S+ m
print(list1)# n% T% o, x( f" `8 w/ V
4 {$ ]' y. C7 I' h/ N" x7 H1 \  U2 d' P( k
输出:
3 M. I# ?( ?; u" v& ^7 J7 B) @$ e& O
7 _- O2 F( h. d, I[1, 2, 3, 4, 5, 6]2 S2 v. v5 }. h$ S; H4 j
- u" C" e/ K, F9 C
3 y! k2 t/ ?& p: @* o0 b3 |) B
1、可以接收的参数6 R$ ?" O; a& N4 m0 H+ r' \# ^1 L
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。1 d  R: V5 Q1 G# I# r3 W6 t
: `) Z: o) R% @1 v
, y" @! g/ w# i- Z/ j* y. V! t
1.1、添加字符串
0 y) E% h, b% i* r: k) oextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。8 M7 ]. q$ T+ T* V* W

' C4 p$ K+ a/ o* s+ Vlist1 = [1, 2, 3]! \: c  \9 s6 N3 ?# X
str1 = 'abc'4 D! V" N) U) l5 A

- V! Y! M6 T' h* hlist1.extend(str1)
( n2 Q6 K9 E; Z& v* C1 T- ~+ {  X2 j# \' tprint(list1)9 L1 I+ c; a" l7 B
7 Z& ]4 ?% C! W/ h
输出:
2 a8 G; I$ g1 M3 |5 n
  c& a  S8 ]. r5 {( `. I[1, 2, 3, 'a', 'b', 'c']
* n, T2 e: L' \
0 [  v4 w7 E2 ^- w
+ D6 z7 r! V& `7 F" I1.2、添加元组/ {) d. g7 ~' N! j6 e8 j) l4 ~
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。: Z  v. P8 s2 N6 X1 T# j
* W& t! E7 M# ~7 A4 y! w
list1 = [1, 2, 3]! E( k! b/ }% l8 \$ d  h
tuple1 = (4, 5, 6)9 I1 k' y  c+ q: m; ~& j$ Y5 |( _

( M) G. O1 @2 S6 `" Dlist1.extend(tuple1)( K# V% ]1 O+ t- t2 e9 y0 u
print(list1)! U7 {  p" Z9 @+ y3 f% Z2 w
) S. w0 n; w  P  X0 k5 L% y
输出:
' C6 y" ]0 b, s/ @# W. O- j  G* y7 q$ O$ s
[1, 2, 3, 4, 5, 6]3 a8 q& `4 G8 r* q
+ ~9 _& w/ d% Y
) t; |5 [. a/ O
1.3、添加字典0 W5 a+ t$ T" u) @
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。# E; |$ d; M/ S, e0 A
6 i9 ]' G, z5 D% R) Z
list1 = [1, 2, 3]: Z: T2 ]7 D6 b. w  Z8 D! \
dict1 = {'key1': 1, 'key2': 2}% y9 w" P( l7 a

9 Q; s) v2 H) \9 p# x; alist1.extend(dict1)3 z4 E* f0 q& ^4 b9 x  q% j
print(list1)
. ?% a; [# h, Q* V5 q1 R
, Z6 C- b# K" S% C' [输出:
. a$ W$ m! l, |. Q6 t9 A/ F8 q9 V( r; Q8 K4 m! |; y# g' b
[1, 2, 3, 'key1', 'key2'], C, w- ~: P' O& u
! ]1 @3 L3 V& M
! R. o; c5 g3 Z$ h8 C  r
2、原理解析
) M" Q2 H  e# N" }4 d& G8 ]extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。( L7 [( z! _, O$ ]+ ^$ p' `

4 S! M; m, _) }# r+ Y3 [8 _" t1 L" p0 I5 O9 u# V

, U& \5 K5 q( y. I% X, ]" U' }我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。% e" p/ U' f/ b
. @, u% I$ D% R2 A& [/ n
list1 = [1, 2, 3]. {. V2 H, h  L0 [& u3 B3 @
list2 = [4, 5, 6]
; U) R5 X1 ~2 _8 g+ l
) |9 t' _9 q; p. @7 hprint(id(list1))- f/ J! \, ^% P1 [9 R
list1.extend(list2)5 |, K) q) I4 J0 e
print(id(list1))" i+ g: g1 O5 b* H' v8 ~8 ~; @

& v$ L# ^2 F8 @8 v输出:: l  |( \$ v  C$ L

9 g7 L+ h% Z& d1930566508928
" m; h5 n6 x/ K9 ^; s7 L3 k1930566508928
, o1 f/ c6 T$ A* R5 A, O
+ d4 z' z* J8 R1 k* |% fextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:8 a9 W1 ^) J2 G/ d* h

  ^! e% m' ~$ l' N3 d+ E# Ylist1 = [1, 2, 3]
  W; n5 g, {4 T! z) i5 |str1 = 'abc'
6 m; Y& g9 F( d4 x! E& P/ o3 T* l3 Q: C& j5 C" W# z
list2 = list(str1)
" R! [! X$ v) P, H+ pprint(list2)
6 o1 l& R9 L0 e4 Clist1.extend(list2)
3 H; t* W( s4 ?) S+ }; _print(list1)
" B  v% {3 X+ b0 t5 a$ b& W! S6 \' o% f
输出:
+ ?6 F; Y% X0 E: q2 G0 Q: s. k" o* E& X
['a', 'b', 'c']
- E7 ~! d+ m6 j3 k! d[1, 2, 3, 'a', 'b', 'c']
2 y& F, A: U9 h8 D
- q- `% n2 n: p$ Z! Z. n5 k
. v+ T! d1 u6 i  _& E3、extend() 和 append()、+ 的区别?
2 I" ^$ z5 d0 g) b% q/ K0 y以添加列表为例' _7 {' }- X. `  b

9 G3 l/ T' }6 t7 }extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
7 v- O5 b! \2 [2 b  Q& P' G; T) G! M& O) w) T
list1 = [1, 2, 3]5 ]& H5 u, C: K8 v
list2 = [4, 5, 6]
) D6 H$ `, p8 E7 K& R8 m7 b9 c7 c- ]
list1.extend(list2)
* C. J' v: j% w+ xprint(list1)" M" }: M2 H# a
' V2 u. H6 v/ X
输出:* ^8 e/ D: S, `- M) y$ ?1 r- V

9 P+ O+ U. r  K. F! W[1, 2, 3, 4, 5, 6]5 x% m. C0 [1 \4 a/ I2 r; ]

/ C- t5 N( `0 _9 b9 p0 zappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
1 O9 O) b4 `+ |- h: n7 l
5 E1 c; g; Q* K. k3 H/ n5 Glist1 = [1, 2, 3]
$ v6 P' R8 e& w: |3 m2 n0 ]* elist2 = [4, 5, 6]
# y) \) v$ l* x) ~: D" K+ X) k3 c& ?% [3 I/ K9 y9 _+ R
list1.append(list2)
# r* h/ p# [( p' @4 p: Pprint(list1)
# N. i( E4 A( M& U3 R! K
( C+ ^8 ?1 b8 M) {输出:" K4 _9 T: s) p  y! X

9 C3 E% z7 W4 B[1, 2, 3, [4, 5, 6]]
9 C- Y* c! P7 e! k
& ^, D* \2 m; C+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变, c  K# F2 }, w. ]8 n1 I# i* `8 Q

. E/ @* k/ _. z+ S: Wlist1 = [1, 2, 3]
3 H% L) L/ V. E6 F* O9 ^list2 = [4, 5, 6]
$ O. @$ U$ [( [! g8 X
* ~0 U8 X% N" s0 o! j: xprint(id(list1))! J' n, d+ a) S7 u
print(id(list2))' a- J. Q. f/ R: L, T
print(id(list1 + list2))
- h4 A0 O3 s8 v$ f
& ?' E- Q, }+ _4 L输出:
6 ^6 q3 L. |1 i: `7 }+ o5 C! n0 U+ G
, I$ L4 E$ u; ?/ E& o2680876376448# i9 [$ w4 H& V) E- x4 n! z
2680876376576+ ^. t4 a+ \' l  j; ?  h
2680878544128
2 `' m, F1 ?$ p; L+ m, S. t6 p1 |+ i3 l; r' U* q
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
- z$ [$ s3 [" S, u1 V
2 h, J1 F! y9 `% u2 z' blist1 = [1, 2, 3]
( U$ U6 D# R4 o) O( o& Olist2 = [4, 5, 6]
3 D. z# M) \7 [9 M/ Pprint(id(list1))
( S8 e$ B/ w% E4 y, U8 ulist1 += list2: a% O5 a. w  H
print(list1)" {! }  z$ l% B1 R3 N
print(id(list1))
. N6 ^- s! w: h% M( z8 d6 t! f3 I! w( y& [  \% M
输出:$ A! E3 Z3 X: }

7 ?6 P9 o, E7 S- ^3 C0 R6 @2150265921856
4 `% k! K2 J& V[1, 2, 3, 4, 5, 6]5 v1 I- u! n7 ~- O# B
2150265921856  T; r! v" z+ L

$ ]; ~% q' f8 x" `- F' V5 A1 N7 j- L) X- H0 B
4、特殊的添加方式
8 Q% ?. S: K! n( r2 M配合算术「运算符」添加列表
- H9 I/ H2 t$ f/ u
# \$ u$ S( a9 ulist1 = [1, 2, 3]
5 B. z8 f9 y% X% V; dlist2 = [4, 5, 6]
  j( E6 Q" ]* i
7 A4 o: g0 [8 l7 }, zlist1.extend(list2 * 2)
0 x9 K* n. t* e0 X3 x: H! Sprint(list1)
) \1 f* _8 T1 P2 ulist1.extend(list1 + list2)
. ?8 W  ^- H8 Q3 R# h. g* ]print(list1)
1 x6 h) s& M0 p  _4 t
- I5 s0 \0 @8 p' N输出:& G6 @' Y! n$ i; v* v, \0 C  z/ v
+ F# S0 E' Q: y$ U) d$ @
[1, 2, 3, 4, 5, 6, 4, 5, 6]+ n" b/ r9 d- E" g
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]1 ^; l: e( A! Q
1+ F! a3 f, Y$ z6 {1 [
21 j9 |& H! H/ g; M0 a
「索引」取值添加列表
3 F' w8 W! b2 k9 e% l
8 l5 t3 m- U- v) klist1 = [1, 2, 3]2 x2 G: h# \" v# h# ~
list2 = [4, 5, 6]
- S3 }. ^( {- O+ e. X2 e+ q
9 s; z! m# [7 A9 E: y% tlist1.extend(list2[1:2])' }6 I  O6 S) j2 G# o; @
print(list1)
4 B" N% g* m& H: \
, F/ G/ ~7 {) G0 e( j, L输出:
: f1 s* w& y7 f
5 F* N+ u+ M: p[1, 2, 3, 5]- E6 }7 W# O7 c8 n/ V

0 u& Y6 }8 s9 L& Y/ G, ~' u1 \9 _) j7 b9 A5 I
- H4 I: H5 e% ?  F2 d5 t
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 14:04 , Processed in 0.360181 second(s), 51 queries .

回顶部