QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解+ v6 v8 J! g/ I# h2 T* q# l
1、可以接收的参数1 i8 u# K$ l- ?( E; z( P
1.1、添加字符串
  o+ h/ ?, @5 s. e2 S2 H, u, l1.2、添加元组! P# Q( Y; N4 Z7 I& N
1.3、添加字典
& y0 r- u1 _& @# W8 ]/ g+ B2、原理解析
& ^1 D, G2 T- {1 r$ ]3、extend() 和 append()、+ 的区别?
. |! G& ^$ T/ u& _4、特殊的添加方式
& V$ `3 b. y6 T4 k  fextend() 可以在列表末尾「添加」另一个「序列」中的值。) D  K% \- K5 w$ X
* J3 e& N9 a+ \: N2 V
语法8 _% Y9 p2 y! s

, T% q5 h1 x% g' Glist.extend( iterable )& d; r1 Z8 r1 W: `! L# K

% q4 i- ?" Q! c参数2 w5 ~; }. ^( n1 _1 I6 V) ^
4 t) \. B. O, X4 g
iterable :需要添加的元素列表
3 \+ |) p+ S1 w- x0 S* f! S* {% B返回值
- [% G3 d( T9 \$ `; b, v6 J
7 j2 y, h9 r) J& \- n. u, b. m没有返回值,只是修改原来的列表
! j# p" t2 J& ?9 e- G' C实例:向列表中添加另一个列表
- M2 L0 T0 V3 S. O& w& C3 z- ^
  L7 y6 H" R! i, H6 P% ]/ @+ y( Zlist1 = [1, 2, 3]
6 ^1 ]6 |9 A/ |% E( Zlist2 = [4, 5, 6]
8 X) y. F% u/ h( P( J' Q1 W
% ]$ h1 g, o3 S6 k/ i/ L& j- Tlist1.extend(list2)6 F8 j# j" \& A0 z$ F6 }* \
print(list1)
/ B  p) i1 F, D( ?8 a& U2 v  X/ e" w& C
输出:$ k' t0 C$ n) {" x) X

; e" V% U$ g" G- F9 q! [/ L8 C+ e[1, 2, 3, 4, 5, 6]
' ~8 \( }( X' r( Z7 r. c% v& V5 z+ T- o& A( ~; Y& v+ n
! ]$ i  K+ [7 s/ D5 C1 s/ v
1、可以接收的参数, H" e1 U& ~/ V" }% \
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
4 F* }6 O+ x8 K3 w. }, J3 O3 V3 [$ H# W4 ]+ E/ v. ~

% y5 c) W0 i# t5 T6 k7 v1.1、添加字符串
+ T9 c- C1 g3 b. I' Pextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
' M$ R( P" s1 f; w* a
/ D' l" k1 c+ F7 a, {# Qlist1 = [1, 2, 3]2 q1 ~0 _; W6 T1 ?1 }  [
str1 = 'abc'
* y5 M* T9 V8 G2 H# i$ u, I
; y! q$ v0 b3 i" N7 S7 ?5 s! N* rlist1.extend(str1)
* [& k% x; k. {print(list1)" F% {4 G4 I* Z* c. T6 s& Z( R

3 }: Y! N/ m; n4 C1 h输出:; U) B$ r) T7 c8 x
$ g9 y) {' k/ Q& C, K8 B, H# a
[1, 2, 3, 'a', 'b', 'c']
& m- e: `- @- q5 f5 I% l9 x
# v2 M. Y' u. M% {5 ~# I7 n. k0 Y% `
1.2、添加元组
8 A1 n* D" _. m# a9 y" Bextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
5 {% R' G. X: l; E0 Y0 _  k! z, k# m2 U( c
list1 = [1, 2, 3]
" h- d& r. G4 f' o/ r" ytuple1 = (4, 5, 6)9 {, M3 v0 x+ p" R2 @. }  c4 ?
3 W  A9 M" X/ G$ s. m
list1.extend(tuple1)7 B+ {3 ]) S8 n: n$ \
print(list1)6 h9 y, j5 |8 w7 I

! X2 j: Z  ~) n1 j  h输出:
  r3 b7 _; N7 R# i8 ]5 O
2 b4 f( |* e, i5 @4 o+ k9 K[1, 2, 3, 4, 5, 6]. A% q' o# `+ f

+ P8 y$ C% S; d3 N+ Y& d! [8 [- H: X( g, I5 d2 a2 |
1.3、添加字典) H' k; ]0 U# b: J
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。& k6 f' ?! M) G+ g

4 S6 D7 x9 [% s9 |0 p5 y0 dlist1 = [1, 2, 3]! H9 l. t8 O/ n9 c  d3 R
dict1 = {'key1': 1, 'key2': 2}
) K$ D/ O5 N4 e" c. ~: }& u" e8 `& s) K9 p  F
list1.extend(dict1)
( F0 y' C: r" W, z2 xprint(list1)
' A6 L% K" Q* _% f" P+ |3 o2 k- U; F7 x, A0 |+ s  t' L
输出:0 [* M+ H# R5 Q8 ]

4 z3 L- k5 r2 M6 v7 F. [6 f[1, 2, 3, 'key1', 'key2']# g% z2 f) J& ~* _0 a9 Y& D
4 f# r4 w* q4 B( R
8 s2 K+ n. [; @# S  Q( M
2、原理解析
. G$ P; B9 t9 P: [: Q3 U3 A, V; P3 [: rextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
  @4 |0 H* Q5 A, p# U
. C2 {0 _3 z8 h0 ?3 G
6 I( V6 A) W6 S0 x+ y) v: x. ~+ i$ e0 z) O
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。- ^7 i& l8 z' f

1 F5 t+ Z4 A1 p0 @: blist1 = [1, 2, 3]
, `: j. f. t% H! \3 ?" ]# F- q# w; ^list2 = [4, 5, 6]
- j2 T' L, a, F
2 J. P  g& a  V( L8 p. M' aprint(id(list1))( ~1 I6 Y- g$ e' e
list1.extend(list2)  S9 S7 H0 c9 F- Z
print(id(list1)); }* j( I  Z) R8 b) I- h0 F" |/ k
; E' G/ C+ ]- }; B9 A4 b' e
输出:
1 ~6 T" y) M- q$ F5 ]/ t0 _0 V8 u7 h1 g# e" O7 d
1930566508928
: M# Q  W, U$ d& r2 h  ~6 n6 J1930566508928; o; M  W3 A0 R8 p$ u2 X

( F* f  o* v1 y6 v6 xextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
8 D+ O6 q7 a; W2 V; w8 M
' Z0 E. L# C- q" Zlist1 = [1, 2, 3]
; J; w9 t1 E$ U+ X, J- Rstr1 = 'abc'! X! r" [/ w, f8 l. {' b# |

2 y) h7 S& B! s0 x9 W* W; A) ~2 Ulist2 = list(str1)
: t$ C" l2 `) {& j. A/ Pprint(list2)1 B6 {+ N$ t% U. c5 ?3 ]; X
list1.extend(list2), i& P0 v  |5 ~" T3 y. ?) @2 U
print(list1)1 v: B/ u" M  i
. Y1 Z5 g4 x: ?1 q
输出:0 O) m+ u" C; @4 C
0 E9 `& P) b* D# _/ Q
['a', 'b', 'c']1 d8 O, N' V4 q; \- ]1 d6 f
[1, 2, 3, 'a', 'b', 'c']2 |+ i5 V' B; t0 D- \) [( U
8 L% U- b! T* y" l! l. `

& w  l/ i' W9 A" @. T  t, x1 f' X$ I3、extend() 和 append()、+ 的区别?
' }( u2 h5 P9 _$ m# A7 J以添加列表为例
* P9 _( P: g( z* s7 t7 z$ m4 h' g. t" U. h9 n
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中. A3 u( X7 M$ E) x0 ~. b3 u

/ Q: A: F2 E3 Q! A% |list1 = [1, 2, 3]6 M4 m, ]) P0 s* F7 w' r% P
list2 = [4, 5, 6], a4 I7 o1 @3 Q
5 ?- l+ h1 l. w0 w
list1.extend(list2)
9 i9 p8 ]9 w9 ]$ ~0 r! Y6 ?5 m- uprint(list1)- h* F* J7 }( f  ~7 w
  g* ~* B5 x3 C- f& E5 y* [
输出:
$ h+ r8 f3 Q9 g; q- Z6 Y3 ?& W4 a1 K8 N4 R/ B
[1, 2, 3, 4, 5, 6]
. [+ Z6 M. b) A# N' S$ m! c" i+ `5 H$ ?$ Z4 J- x( [" O$ J  m. I- m
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
! G/ O6 X" _3 ~5 T9 S6 M1 j" p% o9 }! N
list1 = [1, 2, 3]
1 ?% N( T% S( Y7 X$ O, B. s2 ]3 ilist2 = [4, 5, 6]
9 A* w  O" z% U: V. T: S; z. i! k
! g0 _0 U) k, L& u) Wlist1.append(list2)
  X. }" e- m( E' b" D6 [- |print(list1)
; S. y# c+ v0 v% T/ S
8 |: }, l! v# D$ \" }3 @/ x& D输出:
5 M8 _- S6 u( @: [& J$ j# O$ k1 b  T5 u! _1 o
[1, 2, 3, [4, 5, 6]]5 b% z8 k1 s9 x% w8 x

0 v- P+ P$ T) B( U1 g+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变* ~1 d- m1 ?) Y/ b: i9 c9 d

6 x7 W$ R) _2 K, C3 B6 \; e7 jlist1 = [1, 2, 3]
0 Z+ _/ x5 o+ N7 Llist2 = [4, 5, 6]( Y: d  ?6 V" A. I7 Y6 |. k5 L

' \( Q$ J2 d  `+ ?. W2 G8 Lprint(id(list1))/ P9 V- @7 r( m, _
print(id(list2))
/ \; M9 @+ Y2 R4 b1 q% Nprint(id(list1 + list2))
2 k) ^, z" _' @( U# d9 t
& @6 A, i* o0 y/ o1 x# ^- C输出:! v0 E, c8 G5 H" W; M1 U4 ^! K

; k5 a! K# p% i( ~/ e2680876376448
1 _$ D% i+ J$ r) I1 j% r2680876376576
( \5 Y% S' X# C3 A/ F26808785441287 ^- M% ~9 h, F# T  V

$ ?* r* w6 f/ _/ a* h% U4 _+ B+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
9 `$ |; ?# q8 H/ i. Z3 T2 Y6 A9 I0 }$ E+ G) \( |
list1 = [1, 2, 3]$ N( H; M: _$ b9 N/ L* @3 e& d; Y6 O" l
list2 = [4, 5, 6]
9 ?/ ~/ T* |4 E1 s* iprint(id(list1))
/ S0 [/ l( @; z9 ?  Zlist1 += list2
2 ]- K3 M) t9 Zprint(list1)
2 D7 t- v2 J  q2 @0 R) Wprint(id(list1))9 f5 i- J( p, A4 E; _2 X1 K/ a
' L  _9 _: Q9 I1 ]0 `2 q  ^& O
输出:, s7 i! G; r, K/ k7 v7 b. l7 X& V

9 s) W% S3 \3 e! z% _0 }21502659218567 @* J+ @! Z+ m! h9 L* Z; V
[1, 2, 3, 4, 5, 6]9 ]/ y% Z  X8 \
2150265921856: P+ l! p3 M  E  E6 A5 e" T
) _7 Q) _) h% y+ r  R
4 z% c! b& C' _  p
4、特殊的添加方式
. F/ t4 E& j4 f配合算术「运算符」添加列表2 U3 |1 d) g0 H

3 e- i) h( G  y6 x7 Mlist1 = [1, 2, 3]
2 ]  o1 y7 v/ K6 I: {' Xlist2 = [4, 5, 6]' e; F" Q  R. q( g* d

/ H+ g" W/ E1 I: o6 J' @+ w3 |list1.extend(list2 * 2)
6 `& X, w2 c$ z& f2 L& Q7 ?8 Wprint(list1)
  G) {" T' B. `0 wlist1.extend(list1 + list2)# H( }, i( N8 k- ?3 ~9 ?5 ]; u& J- X
print(list1)
& y, _! Y+ a* F7 Y
- X: g! A( P9 @输出:
9 }# O1 n0 p- ~7 L# [  H
+ R, L. w3 _  e( M( i[1, 2, 3, 4, 5, 6, 4, 5, 6]* d  y3 r0 P2 R# s' o8 Q
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
6 F' V' W" r8 u10 j1 k1 D$ f( ]6 _2 ^% p3 k
2
% E+ u. I, \% ^) B6 R「索引」取值添加列表  @" ~9 {/ A; z( V8 J$ _( X

2 M; W6 K2 T3 K; Plist1 = [1, 2, 3]* H& n& o  \9 X. e3 k; W; i
list2 = [4, 5, 6]) z( j  p: a( m$ K2 q$ ?

* r/ ?8 x5 I; O- e, olist1.extend(list2[1:2])1 K& Y4 d+ N; i* D
print(list1)5 _+ A) o% }8 s0 X0 N' w7 z& w
- D' B- u2 Z; m+ A
输出:
) e) z6 T# W" _# W8 J) f0 R5 [+ H& p: p) m" B
[1, 2, 3, 5]! v2 E# y" N/ B3 Q

) Y! o( K4 o, x. [( \6 {# g, s4 q( o- j2 `+ \- a3 y

& i5 z- n2 C# M1 j0 c
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-4-15 03:28 , Processed in 0.402663 second(s), 51 queries .

回顶部