QQ登录

只需要一步,快速开始

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

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

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

1188

主题

4

听众

2931

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解3 G' m+ k  C- k  M
1、可以接收的参数4 b- q) y6 A: T- {# X4 F
1.1、添加字符串- @0 Y. K& U, j2 b2 I* a
1.2、添加元组1 E( q1 g1 w, ^, y" ]2 t7 u
1.3、添加字典
/ F, U- g" a3 c2、原理解析
; G: M; m, d7 v0 N2 f" Z, R3、extend() 和 append()、+ 的区别?
4 g0 X, F% D% [5 z9 U6 Q0 |4、特殊的添加方式2 k. Q- C* h8 U( y' Q& A# j& H1 N
extend() 可以在列表末尾「添加」另一个「序列」中的值。; |6 E$ _) x- E+ N+ w

) S5 e& \% }. y语法
/ r& y  |( ?. |7 p
, A/ _& m- n% U2 T- Qlist.extend( iterable )
; g2 \+ ?+ q$ s! ~7 k; p  @: t( K0 ]9 f  `, M  n) j. P# |: q
参数
& E7 \, \  m" R5 ]1 g' E$ b+ V9 @* `
iterable :需要添加的元素列表
* y7 ?8 G/ o1 ]) X; c. I返回值# m% _# S& J2 Z6 e- {

  m/ B1 R1 e7 ]0 u  ]: P  {没有返回值,只是修改原来的列表
3 G- A0 j2 u0 {( I6 J5 x* {% b7 I实例:向列表中添加另一个列表
4 c  ~6 o& |& V$ n5 t0 y% }7 o, X0 d  u, @
list1 = [1, 2, 3]+ n1 q3 g2 h5 Z& \; n7 B' M
list2 = [4, 5, 6]5 c. T- \/ K1 K

, l' D( A+ O& ?  v+ k0 S9 }* olist1.extend(list2)
) a% b9 l# O+ @print(list1); _# {- E# d5 w6 g  F: E9 T
+ N+ B& m6 c( k: I: R3 j9 L
输出:% r1 p: n7 s9 p; ?+ a4 V

( s- t; B6 N1 u6 s1 i: I: M& k[1, 2, 3, 4, 5, 6]
$ d3 T$ [# T4 p+ M5 X! ]& t+ R8 L- d; [2 X

2 _4 u* X- Q0 f9 u, n# {' F1、可以接收的参数( S& ^( i, `2 A. U
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
! H  n- g, e, u/ E! p% F
# J2 A9 K9 U1 U# ]1 I! ?1 ^8 ^/ s5 X  i
; K9 }  n& ~% i. p9 ~% o. g1.1、添加字符串) W8 U2 V- P- h4 `
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
( F% K. f6 [4 i3 E! F- F' _
- @: ?7 S* f& V# Y  r4 o8 Y3 s3 Mlist1 = [1, 2, 3]7 W4 z: `* U# G) f* D9 j* s- g& A
str1 = 'abc': C7 Q% r4 D$ a! F! [

; v+ Z+ _. t! r% flist1.extend(str1)1 j7 c: d* J: |2 b
print(list1)* t/ U2 O5 S2 W, P! f4 T

, d# {1 c' b& v  x+ |3 ^9 t3 B: h输出:
. v0 j  q4 d0 L7 x& F5 {6 b& P! r! o( Q$ x9 g  c
[1, 2, 3, 'a', 'b', 'c']
- ^% S/ T1 F2 t9 ]6 l' n. Z9 h# p! r1 _( x

9 Z$ P2 x# A9 Y) L' s" l1.2、添加元组5 b# D4 d3 ~9 N! n! Z0 r
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
- w1 a! m& U; H' `1 k: a* x$ l. F0 ?* ]9 G- @* z
list1 = [1, 2, 3]
, q: n( u7 l  D+ Q) c: jtuple1 = (4, 5, 6)& V. m# v& u5 |/ g
6 P. V5 S7 p7 |  Y
list1.extend(tuple1)
0 n, @. G% S( @) z( x: eprint(list1)
* {) h7 R# q- d: v
- A( j: {+ w: w输出:% `( q+ ^$ O4 }9 s6 M6 C* G
* e. M! F6 T. e9 f* r
[1, 2, 3, 4, 5, 6]9 x/ {' O0 d" K
, e, F8 t: u: i- B0 b3 i2 f9 G
! E! `) w6 i: N1 Z# F2 q  y  H3 D) Q
1.3、添加字典. m# v5 O. A# ^; v/ p2 i
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
, r% k! T& Q6 ?5 c; ^  B4 n4 j0 H4 A- @8 A" Z
list1 = [1, 2, 3]
- I( f/ k# @/ ?2 k$ pdict1 = {'key1': 1, 'key2': 2}
0 B% d$ M: ~% V
( n" W6 E# k( [list1.extend(dict1)
+ m" d& b  y+ \. g( ~print(list1)
4 {  T# H: H" Y% h' c( U! ]9 L8 J/ b8 H: A+ m" Q
输出:) B" V2 O9 C+ w7 }* h

- s  y8 d4 y  q[1, 2, 3, 'key1', 'key2']
6 m+ X: B" n1 k" p
; ^, S# v3 R) ]  [: Z1 p) ]9 p# ^- y6 e1 P" b# v3 e
2、原理解析
8 W/ w. v) \/ \! r  ^extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。( g6 Z- C; L- n; S! {' W

8 V+ S* @9 F+ ^3 }+ v0 Q1 Y  x0 q; k7 i3 u) D
6 ]3 L+ s$ P% R/ N1 E
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
& v1 ]: |3 v. O4 u
- a8 k. w2 `* Q4 C5 Llist1 = [1, 2, 3]0 S9 |2 I- F) q
list2 = [4, 5, 6]
2 M# j7 T1 V, p3 L
* X, R" o. o& x; J* c+ J) Pprint(id(list1))4 w- g1 Q5 `9 ?5 @1 T
list1.extend(list2)# {% A9 S0 p, e& y
print(id(list1))
7 i- m; f/ c  b: W# h& z" _
% u  ~/ y- o0 C5 _# h# p输出:
5 N! v: {+ ~* G+ ^( B) H" s$ E% q% o8 q9 z4 Q
1930566508928
1 u( Y7 f$ p! R# N2 U1930566508928
7 [' x- p$ A7 B' m4 ], H7 Q# `# _: _* R( s
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
# _* k6 A: h+ ^& Q' [' }: g" D. l
list1 = [1, 2, 3]0 b' @4 d  C' x: w7 O1 u" Q
str1 = 'abc'
) g( k3 F/ q7 |, a1 ?- S
3 P* n4 V/ c+ ylist2 = list(str1)
' E( E$ ?6 B- r: F7 hprint(list2)
) a% v% D, ^5 p8 v% Slist1.extend(list2)1 y; I+ H- S( x0 Q  z* |2 l, x4 C
print(list1)
' ]0 b' A# V2 Q0 M" G
5 ]' k. N* P2 m" y输出:3 }6 v, q/ U( h- B, {* I* B

8 c4 Q; G) y. p['a', 'b', 'c']
. I' {% A8 |. b0 o0 P! g$ U$ T) z. q[1, 2, 3, 'a', 'b', 'c']
3 F1 {4 m$ Z8 v6 ]% W
0 \4 H" b6 [( d! n. K" A  C% L" ^7 X/ s  _6 x9 b" E, P
3、extend() 和 append()、+ 的区别?
& Q/ u& f$ ~, J  V' `以添加列表为例
- t9 m3 c# c9 J" g$ O9 m5 q1 B8 @' L" R# h& Q
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中* Q5 a* o4 b) _, {) w
4 S5 u) \+ o+ }) W5 ^% o4 Y# h6 D
list1 = [1, 2, 3]  ^% t4 ]. z6 a) H& ?7 |5 W0 f/ W! T8 o
list2 = [4, 5, 6]7 `' l6 j, l: T1 D! l- Z

# P4 O& L$ F8 `6 ?4 E! u2 xlist1.extend(list2)
2 }, y7 l, ^" c& Iprint(list1)
& u9 h' t& T4 e# c3 o- ?; l3 H8 W0 \) J4 H0 O
输出:
2 [8 r" k3 W+ I' Y' }
8 W+ a/ a; p7 i# \8 X; f[1, 2, 3, 4, 5, 6]
. ~' P1 Y  Q. O* j# P% e
0 p, L3 _6 s% z! r* K# Tappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中  ]: [8 Z$ \0 \0 ]  L7 a. ~

, F' R5 c, n& b+ Qlist1 = [1, 2, 3]
7 K. B& S3 \% R+ [$ ~3 blist2 = [4, 5, 6]
+ o6 S' y/ X( h9 R
4 |8 a0 s5 X% h) Nlist1.append(list2)) v- J8 T$ A( t! C5 }
print(list1)
4 V) ^5 T0 {& d( T. L/ G2 N9 p9 c
输出:
& q7 b# V5 i9 y- ?, i: @  ^) U/ V; c% @! o% E, y: A
[1, 2, 3, [4, 5, 6]]5 s9 n! d0 s* s

1 W  I6 d3 r9 M, v: L+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
; q8 e& }) P; u% G; `8 F3 E
% ]' m4 }+ K, i6 ^list1 = [1, 2, 3]
: g0 e5 [0 G9 z$ nlist2 = [4, 5, 6]
: r$ ]0 h' i% j0 q1 l, A! F$ a0 W5 w- [$ p0 J/ A8 g
print(id(list1))/ D- i6 ]  A3 c
print(id(list2))% H# H( ]# S4 m, c4 @
print(id(list1 + list2))+ ?  A4 i$ S. ^1 @! a1 W' n

% i! Y& ^, w$ j# o输出:7 g3 e2 Q! W3 M( ^% T* ~

0 Z3 e; Q# C7 V- ~7 Y* g/ }2680876376448$ H+ m8 h0 g2 _8 {8 b0 X
2680876376576! ?4 j8 s+ F: c- D2 C
2680878544128
# s$ m: P/ g  w. O5 O& T6 b* _
; c' _: H8 V# Y* {+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
5 ]. p+ t- B) n$ s0 V$ r+ d& c" g" Z% X
list1 = [1, 2, 3]
& P, S) T% d3 i2 ylist2 = [4, 5, 6]
% h& x& J- A6 d; P; _7 iprint(id(list1))
6 m8 ~4 h3 q7 M, a- zlist1 += list2
8 ]; J8 Y% ]* e, X! E  r% [print(list1)' G7 A/ l) S" |
print(id(list1))
$ `5 i% \) v0 Q- Z; u' J. o
: d* V  B! X  R3 \- U5 e/ T/ W4 s4 Z输出:% w; N) V4 Q* V( A  E
. C# ?( X0 }; z8 p. Q+ r$ k" |
2150265921856& F0 j% [( T. b' _  O
[1, 2, 3, 4, 5, 6]
4 ^* ], R: ^5 h3 K% h2150265921856
: ~) ]7 b  ~9 f: @  ^% H! }$ G3 `0 k% u

4 X' `) P% z3 Q4、特殊的添加方式9 H) d( l! q9 ~. a9 r
配合算术「运算符」添加列表
2 K% v$ d5 H6 v9 c
  M4 I& h/ H% ~' X1 rlist1 = [1, 2, 3]* E, D- a8 v% ]1 M8 J, e( W4 D* k
list2 = [4, 5, 6]& r6 z; F0 V0 }* H0 z; b: F9 c
# @+ [6 m  Y2 @6 L% O, ?/ S
list1.extend(list2 * 2)& T( u' V- X8 f' H6 F) J7 ~3 c+ ~3 U- i
print(list1)
% P3 T+ d1 C* @! F1 k/ mlist1.extend(list1 + list2)
; K! ~( ?6 |( q) m9 Hprint(list1)
1 j5 b8 c  @+ G' A0 `2 X2 H0 L* a
1 W, ~" W! E5 U0 Y$ L( c输出:
4 `1 r, L, p5 ^, N8 {6 F1 u; }( H# L. \3 g' J/ N, x
[1, 2, 3, 4, 5, 6, 4, 5, 6]- s, |3 r0 s7 y; f% D3 d
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]+ S+ U, D! h$ A8 T
1* j6 U: H+ H6 v0 q9 f8 d4 ]
24 L9 A5 ~9 m6 L- j' b( v
「索引」取值添加列表/ ^4 u0 K  v  C7 w1 v0 V
9 P8 A8 M5 r7 b: c9 e5 L
list1 = [1, 2, 3]
- X5 A" @2 M, }: W! `list2 = [4, 5, 6]
, j5 L- i0 f  w9 j8 K; I3 x0 n3 ~& w0 z
list1.extend(list2[1:2])
" Q+ Z! b  v( T' K! j5 ]print(list1)
" V9 Z; o7 W/ G2 H7 Z5 N
6 f" j! R+ m7 \- l输出:
$ k! q+ p7 P7 c! ~% }' o" x9 k: k$ f1 ~$ F4 X0 e
[1, 2, 3, 5]
# k9 d8 Z& |- d: ]- x5 J  x
. N9 A( [/ G* s7 q4 [$ a! D" {8 l
9 A9 P* c" B' S/ v! T% a
& ~5 M$ p# h) j. h
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-5-26 04:40 , Processed in 0.312435 second(s), 51 queries .

回顶部