QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解" t( U, @3 d& Z# E
1、可以接收的参数
+ S# `9 `8 f" d7 B9 q6 ^1.1、添加字符串
* p6 O! W- k  W6 P  z9 r% S1.2、添加元组
3 L: ~) b; I; T1.3、添加字典2 ?9 B- Z4 N$ m. H0 P* M- Y. L
2、原理解析
- ]+ ], d# P2 k, j% A- f3、extend() 和 append()、+ 的区别?" ]! W% P: K- L5 u$ }
4、特殊的添加方式, S# n+ r, z) {; j% {( u
extend() 可以在列表末尾「添加」另一个「序列」中的值。2 N3 G  e5 e; K( f

" b" }* e1 q' r  s8 E+ g语法* b; C4 C) G( J" ]# k
" t* W& z2 D4 ?
list.extend( iterable )
- d. L4 I2 v+ o% s4 n: J( z) w7 L- r+ O8 \- K8 ]3 k) i
参数# W7 b$ b- Z( H2 t% I3 |

  v3 l- G( c* [: [iterable :需要添加的元素列表
' _4 N- q( ]% ]0 w: n0 m返回值2 l) M( V# o# l* F, k! _4 Y" l

* B" E4 C/ g: i+ g  C' f( @没有返回值,只是修改原来的列表
* D' n: o# ?  V6 P6 d0 a5 f实例:向列表中添加另一个列表. o1 O, N& f: K

( \% z/ I2 k6 j7 [; z, Vlist1 = [1, 2, 3]
; c3 B) O9 ?) l; U9 S+ y6 L/ Hlist2 = [4, 5, 6]5 |0 ?3 o9 {9 O. P

/ j( U4 \) S3 e  P# }list1.extend(list2)
9 g. O/ A9 ]; {" @+ I+ x0 wprint(list1)
5 c3 Q; i* f( p, F  v4 a3 D6 x/ ^" ~) e$ g3 g
输出:; J* m5 r! G( P  e3 v( C% X; d4 r1 G
% S+ P4 i9 ~3 h; V
[1, 2, 3, 4, 5, 6]& `- ?( f+ \; f& a  l5 ^0 A% ~
( z4 C0 n7 V/ e$ @) F, R
  Z# @% l+ \8 V3 q7 i
1、可以接收的参数/ l, s/ _; I% G! x0 x
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
4 D' D9 R" S; ^/ t, y" P" y! }5 g" f2 b3 q& ^2 @) m
: i  G. G) y' F3 F) l: w1 y# l
1.1、添加字符串
8 Y: Y  I5 a8 |' xextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。2 O5 E1 ^& S9 D0 `( V9 T9 a

  l3 _' k& {0 F1 clist1 = [1, 2, 3]/ ?) q% l( T" C( ], W  J; A& ~
str1 = 'abc'
# ?5 U% j# o8 _
0 l$ c3 ^* Z" w9 @list1.extend(str1)
6 m/ z& Q% J" D4 N% y4 _print(list1)
  ~9 T6 z7 Y- W& ~
( j( d; u4 M, a6 {: r+ j3 \输出:0 W# p4 X- ~& i7 Q$ p: p, r  Q3 ~9 x
: f  s( b0 V+ S0 y  c8 Q
[1, 2, 3, 'a', 'b', 'c']- Q; q# Y5 a0 V: E$ q7 ~
, ~1 {5 u8 e9 S. G& K

* F# h7 m8 }  p5 `, ]1.2、添加元组) c7 R5 o/ W1 X, m% z% B8 M, @
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
4 M: |2 ^' u) c  p- B. c" H7 L, k+ l3 t6 \% @2 I* c+ y1 g0 i4 q
list1 = [1, 2, 3]
! Q1 r. }% ]! O5 F$ Ltuple1 = (4, 5, 6)! B2 c! T$ y* ]' X) L- T: ~2 y" A

3 `# D( B8 v: W) r' g8 v+ w, E; s) Wlist1.extend(tuple1)
0 @. W( T& @- E7 `/ E% x: z6 rprint(list1)
. N" E. h+ O0 e
* I' K* {, _  f2 ^1 d8 n% N. g8 ^输出:; c4 U0 p8 n, Z$ h2 x) [4 X
* Q7 D$ r9 l4 t3 E
[1, 2, 3, 4, 5, 6]
4 M0 j  L% G# A6 Y6 `( T
1 q3 M$ q* q7 ?1 D
1 `# @# b3 ^7 ]# B: o1.3、添加字典4 f3 {/ v1 k( p* d$ l
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
4 ~( b7 T3 A# [- i8 ]( M' s3 J6 a: U$ @( X, f/ J& O4 b
list1 = [1, 2, 3]
' a  s5 m1 ]8 t" x1 ?6 F1 {# xdict1 = {'key1': 1, 'key2': 2}0 k' r% u1 p+ p3 l% C
! Y+ h/ E5 G. j" t( K/ f+ Y0 y# X) `8 b
list1.extend(dict1)
  l8 v) i' I3 @# c# qprint(list1)/ b. ?. `$ |, y! E1 k' e8 H8 k  x

" Y! u2 p8 ]8 |  g( E. k. }5 @$ M" r输出:' R* g+ N! L1 k

0 s7 ^$ |! [/ h) n3 K[1, 2, 3, 'key1', 'key2']# b* L. E% S/ v- [0 X3 S

" E2 V5 G9 S4 y- [+ ^+ |, Y7 p) E( ^
  W' W! A" O8 Z% S- b2、原理解析4 z4 S% ~$ o0 T$ U0 K* K5 W
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
/ {, h6 d  e  _6 O: p7 j* f% j& S; P2 U
$ l% s' ?( o+ g2 E
# u0 G& P3 r, R. r* `) y
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。0 E4 a; ]5 |. Q. ^" y

/ H0 J! a" P( c# {) c# `list1 = [1, 2, 3]
3 _" ?/ g6 R6 Y5 J4 l4 d- f$ i+ Glist2 = [4, 5, 6]) `4 H7 ~" o( V2 I9 U4 T& w

9 N/ B7 \# b/ X" u( qprint(id(list1))3 J4 |) c4 c) E+ o
list1.extend(list2)- W* P" {+ ?; v0 v* }6 M( i  b
print(id(list1))
" Z2 g/ s- r' P& x
& m$ Z# z/ f6 b! {  d输出:
# n2 L: x. H8 d% m
8 p8 U$ c. w; w6 s! t1930566508928
% }$ F7 o1 Z" y" X; F& A* y. T, P19305665089289 M2 v' e( ^- t" K
2 e0 t/ T9 y2 u: r% M9 {1 `
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
4 r" d2 ^- v4 b; C0 r8 Q
) E6 o6 M  n; {$ {( Z0 ?% hlist1 = [1, 2, 3]' w2 u! N9 W2 M; r3 j; o* _6 o
str1 = 'abc'
0 L. P4 n5 C6 X4 E  j, p" h6 X% v( F$ n
list2 = list(str1)
0 M" n7 Q3 O3 G2 i7 Fprint(list2)
+ R$ P# k, p$ Q# ~! Tlist1.extend(list2); D0 U4 [( L' t: F: c" U
print(list1)
7 E/ ]$ f3 m' Q# i' S" e: O% d4 \' u
6 f4 A1 D3 R  d6 H+ q7 E8 I输出:# _& [. o- E7 r  M! N1 o$ N% W

- F/ h  _7 {3 f. ~7 e['a', 'b', 'c']* m6 F! U# Q/ A$ N
[1, 2, 3, 'a', 'b', 'c']/ c, z0 X7 U# Q+ K9 ]" X4 x
, s$ _! w& ?1 P/ F

+ \" T% p  O4 X7 y& _( v3、extend() 和 append()、+ 的区别?
; Z3 v2 |" U* v* m/ k' {: \以添加列表为例0 Q  Q5 @2 ~( Q8 J) I2 W

8 C  W$ Q  f9 `. I3 Z# fextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中) ?3 i8 v& U: n, E

* @& u, H) A2 D  Y0 r- slist1 = [1, 2, 3]
4 F3 n2 A7 E! ~: F8 mlist2 = [4, 5, 6]
, W1 X, p1 h( A( j$ @) ~1 a; `3 c% B3 c- k' ~
list1.extend(list2)
+ W! [5 y2 g5 V# ?: {+ X" A/ g/ cprint(list1)) H$ @% v; u4 D) q& |* T. t

% ~' T: ]# o( c/ N8 M: o输出:$ L$ W6 p: Y9 _- h7 M7 M+ T

; ^! f' \5 S: n) G4 x: b& O[1, 2, 3, 4, 5, 6]( Y. M( d+ e) `3 G: D
5 s9 p4 {1 Q9 L0 u0 d6 m; A
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
' c3 J- q* `7 J$ P- T# t( x* H6 B2 Z6 Q% u. `7 w
list1 = [1, 2, 3]
0 w4 r; _# O/ }! l6 H6 V( R+ [list2 = [4, 5, 6]8 T4 f, T0 }9 K+ j, n' u

- U2 n4 v! W! _4 hlist1.append(list2)1 H: y6 e7 m  Y' F" Z+ x
print(list1)
( L+ `9 f$ [' A+ p" X9 \
8 S4 ]: V; }8 Y+ O4 C输出:; x/ y! u' k1 _, j' D

) ]/ S5 R% U) b5 d3 P6 b[1, 2, 3, [4, 5, 6]]7 u& H# j1 v# M* {: j5 X

  }9 u3 h7 n- C* D" @! Q2 `+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变- B# l3 ?. T' G; u# C! T' U* y, x

( t- Z/ L# o9 S, I7 q# |list1 = [1, 2, 3]
. D( Z& p; r3 J1 Nlist2 = [4, 5, 6]# {9 I8 S% i( @8 j1 `# ^

1 k8 l1 ^9 D. i( fprint(id(list1))
+ g2 K7 Z; X; o: v- Zprint(id(list2))
5 F' r+ o* S( [print(id(list1 + list2))" k+ X& k& F% F

" C5 E" A1 i( b8 L4 C输出:9 I! [4 O9 U1 w) D+ ?: |4 ]- [

/ C7 J0 E" R$ ]* C; E2680876376448
" N( [( s6 m4 [9 X26808763765766 y& U5 R% Z) U: z$ n
2680878544128
, P# p; j" {8 P9 s7 i
) ]9 L: u, l. D- A( m' [$ d0 T+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存- [1 v, e" t* Q8 S9 p

, q% w) o# ~* z+ ^! flist1 = [1, 2, 3]
# q$ N; l" z) P; d% J( L0 Tlist2 = [4, 5, 6]
) L! u) b  I# j- M$ mprint(id(list1))
) w) n7 B; Q6 y9 }% O+ O0 elist1 += list2+ q2 \3 m2 a# t, M; d
print(list1)3 F0 d! |& {5 Y0 Z
print(id(list1))
! Q* M0 [: c: M% s3 I9 G$ @7 X, n! i# M* f, i$ l& A1 v% {6 }
输出:
/ P& w1 _' L' }( R" O8 R
" p' ~7 u  y! j* U2150265921856
& n$ x6 t' c/ R9 C$ z( m: G[1, 2, 3, 4, 5, 6]
( U1 F9 N' p  I9 y, m# M4 o3 ]2150265921856
6 |9 p, y! J* z$ e$ n/ B  w2 |. d7 c2 Q5 X6 w

; O. ~- i) k9 w4 H1 |% D4、特殊的添加方式
! k8 S+ y# ]& ~, ~配合算术「运算符」添加列表. Q  `3 K. K: A7 D  T1 ?

& H6 g; h- E/ _: F0 h7 S5 qlist1 = [1, 2, 3]  Z) f5 d) P+ n; n8 k/ I/ ^5 k
list2 = [4, 5, 6]7 K; K. G2 {* s, X: y5 v
& i; U. b2 I+ J9 t
list1.extend(list2 * 2)" o; \! W- Z) |8 Z1 T
print(list1)
; d! ?4 T+ S4 [( alist1.extend(list1 + list2)
$ T8 x+ i- f  o) O2 ]print(list1)6 ^+ ?/ z% _2 ]- X% V

0 J5 q! K& f$ a( h7 R  |! a输出:& ~, m0 e. g& R" O

$ m" C, k) W; n! ?[1, 2, 3, 4, 5, 6, 4, 5, 6]; J2 j( l' |$ R* X8 O
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]" l7 {7 N0 k. ~5 k: Y# i
1+ J  w3 |) s7 h0 b0 [% V' l% P/ `( D3 H
2& i: T& a. M. t5 w, L8 t& I4 Z% W
「索引」取值添加列表
% k, e7 D& M' x3 h! b. Q# B- b/ C: m- b4 T& S
list1 = [1, 2, 3]* w+ j+ C+ g* r$ {! Z9 O
list2 = [4, 5, 6]
: O+ H5 Y* R. W2 O9 ?- @. N" q
8 t  l/ y# P1 q+ v1 L- o4 a" Glist1.extend(list2[1:2])- b0 V: k+ t8 P" J2 X0 [
print(list1)" k3 `& A) ?. X, g0 w; U+ Y

6 d% ~6 h  E2 W( Q+ M* ?输出:
8 w( H8 s5 \7 j
, y7 K2 v9 {" I[1, 2, 3, 5]
6 b9 X0 s9 B4 T0 x7 G- A+ u
/ I+ ~4 [& U6 h4 I  O8 @7 e6 V8 X* b
1 h+ ~, H# ]! z7 f+ c/ h+ F
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-8-4 05:02 , Processed in 0.376244 second(s), 51 queries .

回顶部