数学建模社区-数学中国
标题:
Python 列表 extend()函数使用详解
[打印本页]
作者:
2744557306
时间:
2024-3-22 11:52
标题:
Python 列表 extend()函数使用详解
extend函数使用详解
' F7 Q6 V5 Q, p4 r4 f" [" y
1、可以接收的参数
5 @. N) e0 \: W/ V
1.1、添加字符串
! t/ T6 i; s4 n, @# c* y7 V" W
1.2、添加元组
- U2 M. J; F: l+ A
1.3、添加字典
5 @: U/ q8 J3 y. Q1 u
2、原理解析
" L5 H" k! w8 y# ^7 B
3、extend() 和 append()、+ 的区别?
- T' X r& A4 O5 U( k5 e
4、特殊的添加方式
5 \" W( g Q% ?' P: n
extend() 可以在列表末尾「添加」另一个「序列」中的值。
0 t" z, P) U& w
: p3 Q: z. }! E# z
语法
, j7 R0 @2 a- w, K" v
4 U7 k7 P" B# r* q7 D# Y
list.extend( iterable )
4 Z; k/ h# ^/ N7 K4 n5 S
; e( n. p1 [9 T/ u
参数
, X3 y, Q1 C& w- o1 M
9 R/ Y1 j* ]7 a Y3 l1 @
iterable :需要添加的元素列表
8 s1 l- A4 M' U$ I" O+ I4 _( l2 i
返回值
3 m' L3 O/ ]7 F* U! G5 h
7 P& b) r% ^7 W% c/ J
没有返回值,只是修改原来的列表
# M; g, g: ^/ ]* y
实例:向列表中添加另一个列表
$ L: l7 B* N; o
: c: q. c2 R X5 d& h1 R
list1 = [1, 2, 3]
5 T1 ^- S, w" s1 R' u
list2 = [4, 5, 6]
( h) a% ^- h: u1 Z' S
?; s3 C b0 P# G( R
list1.extend(list2)
/ ^+ L. y R* e0 W; G# ^
print(list1)
% g; d- B! V" W; [/ E4 \4 ^* a
; n+ F- g9 O$ j
输出:
- z% W7 U. a" V. D J5 \& h
8 y) C* Q* g8 B* s
[1, 2, 3, 4, 5, 6]
8 Z- g! @: a+ ?! H# E" P" g
7 l) T! x* S, L* M' y! B' f8 H
1 B; P$ W" ^" t1 ?7 u1 a2 l
1、可以接收的参数
7 w) `+ D- `, P( \( u& H
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
& S& t5 I8 l/ m; `+ f8 G/ J* Y3 o
# D: W6 u4 D' m- I( ^ |
* W4 z9 n; @: D4 ~' ?0 L+ F) d6 |
1.1、添加字符串
- f0 j3 P6 e# }1 `8 ]
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
1 |( H9 Q: i; G# t+ N: E
, `" N3 ]) g+ o
list1 = [1, 2, 3]
$ ^5 k5 H% J' U
str1 = 'abc'
+ j& D% e5 _ w! D/ U
( z2 C" d8 t6 j9 p- D. p0 q9 d# V' a3 e
list1.extend(str1)
# W! y3 W7 |6 K! m! v- @
print(list1)
" A% k8 u D5 o# r
" ^+ a! K4 J1 x, d9 s6 a1 i
输出:
' O9 f( N! R& O
2 g. n4 m, B: W: a
[1, 2, 3, 'a', 'b', 'c']
( W9 n/ d7 s3 B3 v3 m' N
/ ^, s3 r5 f2 }; t. I& C- W
}$ l7 }+ x1 {5 _
1.2、添加元组
/ g5 [3 X$ ]- m3 R- s
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
# W0 A9 Q E1 \6 Z4 N6 j5 [8 S
/ G9 \0 L' G& e s+ P
list1 = [1, 2, 3]
3 g* h8 O3 ~7 @4 D! F
tuple1 = (4, 5, 6)
4 u' f3 D2 R) Q+ \
" R4 V, Z3 N# h6 S, ^$ V
list1.extend(tuple1)
! z2 n |! n2 F/ J7 L3 e# E! Y+ k
print(list1)
1 v: x7 @/ @: o0 S
2 ` K! V) ]' s5 L. N9 o
输出:
, m( D% k' H7 V9 N& c. a3 F
2 M/ L- ?, g- W# e7 s( o3 o
[1, 2, 3, 4, 5, 6]
9 ~, ~; d& ]% K# A
0 Q( t5 K; c9 u3 v
- I O8 k+ F* s `; O
1.3、添加字典
1 w: r8 ^+ {# ?' S% ^ \1 q
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
+ B2 S w- T8 o2 ]& S+ X" O
. t6 \- p( {2 r# j9 Z
list1 = [1, 2, 3]
( T7 C- K% l: p; R4 ]- d3 P( s
dict1 = {'key1': 1, 'key2': 2}
U3 J) u t0 c4 N
8 X8 R, L( X* S0 i. o8 u3 G
list1.extend(dict1)
0 _0 r: q- [! ~' ]
print(list1)
7 F p4 V- v {' k# @1 n
; i( S, u4 |/ ~# l/ h2 a2 g
输出:
2 H6 S5 \( k" h" f# g2 _
0 ?. P3 e6 p- c7 w
[1, 2, 3, 'key1', 'key2']
# x M5 H) L* j' c
4 }- a* e4 _( a. c9 O% @
4 g" H8 V8 Q; c& E7 H9 |
2、原理解析
A3 n. @$ Z, s3 R+ F7 P
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
0 M8 l+ Y+ \, q
" T# H7 p3 R. C' k0 w' u, u
6 b7 n- |8 T$ L! V& \
7 s* i3 t) O4 y. d( e
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
! t# T$ u+ N+ W$ ]" Q& I" D
2 J- N9 S2 k! D3 e7 p& ^+ o& F1 J2 h8 o5 y
list1 = [1, 2, 3]
% |- o; j4 E" s1 C& x- D* n
list2 = [4, 5, 6]
2 H) T) b4 x1 z) j" k* \# p/ X
9 r5 F2 Q3 z$ W; k2 B- T, |6 l
print(id(list1))
9 D( [( i8 Q: G" k! u A( a) e8 C
list1.extend(list2)
8 o' e. {$ t& T3 _* w$ X% i" H
print(id(list1))
t( c: W0 I# j
+ c' i3 s* }3 f9 q5 l
输出:
/ O9 b; I! p( v. e# C0 t0 D% M
1 i& b$ k/ L$ c' M/ s! I3 r
1930566508928
9 R# M8 ` X" r3 E B
1930566508928
/ W8 v6 b8 T8 J# v
# g% {" _0 P1 N7 x6 E2 c% Y) H
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
! f ]" i l( j4 P$ I& p. h; H2 V
- L+ |; b R+ C& X- g! s
list1 = [1, 2, 3]
( ?; E- d. i! U# ?) D: W$ ~6 Y
str1 = 'abc'
0 J. P# } w' x" F7 N( ?2 T/ X1 S
! M+ U( `3 M+ t' v0 L$ D0 }3 r
list2 = list(str1)
8 `2 b, K! M3 X" S0 K
print(list2)
' }& E3 ], I# k$ {; i! j2 m
list1.extend(list2)
! O- f* @ l% O- N0 C& T, ?) W- [# _
print(list1)
) c4 C0 \8 ]# s. O3 t
* e2 F. e( @* I. f3 D$ J' v
输出:
6 ^' l5 F9 i( c" t; y
" ]' E3 R; R0 @; a
['a', 'b', 'c']
. u. Y. N5 n7 e. R6 r7 W7 p
[1, 2, 3, 'a', 'b', 'c']
1 x! \( o8 R5 H9 G9 H
, Z( `3 ?5 @: \* ~4 m+ E
+ O' V6 S0 B- [) n Z- n
3、extend() 和 append()、+ 的区别?
; H* X2 T/ W+ c. I5 y
以添加列表为例
# j: q$ J1 K. E7 K4 |* @
% `0 d/ m+ o$ g3 N* V8 x+ [
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
+ j8 G2 h2 A1 [+ n; T, x4 D
! h) U; `' K( V& t* Q
list1 = [1, 2, 3]
( W1 v3 L$ F- }
list2 = [4, 5, 6]
& l) x5 p1 \! q, @$ Q: S& O5 r
- p, l1 b# v* \7 h) B& B2 \
list1.extend(list2)
8 y; n! `5 F. [; b1 _
print(list1)
) k G* ^0 T% d' ~
' y( d# q8 {0 I M5 B
输出:
2 a F P. `0 Z8 h- Z
7 S# |) M+ L& D7 j) P: G1 Y
[1, 2, 3, 4, 5, 6]
/ v$ U) n- v9 r$ \( T: y4 k: O
& T/ L: d0 }! Z
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
% D8 | Y. h s# [$ @* l
: n; Z9 X1 `: C4 I/ @3 u6 Q; u5 H
list1 = [1, 2, 3]
( |) c& @+ z9 f' o6 d/ D: O( ]
list2 = [4, 5, 6]
* R% r2 o. b T
/ `$ z+ t- g7 i8 V
list1.append(list2)
4 D% h8 w3 `3 [6 H
print(list1)
# U& P1 S' P( `8 ^$ A
7 R7 G& @7 J3 B( z4 L
输出:
6 _7 U1 ]3 \0 [- h0 u+ `5 q
# h P* P/ G/ ` E6 R& k
[1, 2, 3, [4, 5, 6]]
0 L; Z+ q6 s4 \1 Z# d( M+ k
+ V( u. v7 v0 X! w& N2 ~6 I
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
/ {% O$ q) q* u0 S8 a# D( ?/ S6 X
1 ?- E1 A" E" u1 b
list1 = [1, 2, 3]
) A" D; l+ e6 H; Y% C. {
list2 = [4, 5, 6]
2 i8 N; {* _6 ]6 |/ K. t
5 T5 Q4 A' p" ]
print(id(list1))
. S. B$ N2 S# j% J* T
print(id(list2))
% s4 Q Z" M& _
print(id(list1 + list2))
; N9 H( C# Q0 \: W' d- n( D
+ Y( [3 R& i2 m3 y+ g/ U
输出:
1 W, Q/ g2 W# o9 u8 A
. x3 y" N% m' ^1 C
2680876376448
& y; s4 S2 q6 y
2680876376576
2 b. J, i2 b! H- [. q$ q
2680878544128
9 W" k- ^, x1 w6 K: p) E
% ]5 v4 `7 z3 k; \2 j. v
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
& \+ j( b. j: m& w/ n. L
6 G% \: D: U6 V) G
list1 = [1, 2, 3]
* D% l6 e% ~+ u- `* S( j$ n
list2 = [4, 5, 6]
3 y/ y7 h' l& `& N
print(id(list1))
: L0 V# z1 a2 ]- ^( a/ a! p
list1 += list2
8 G/ M( z3 M, m% F9 n: s
print(list1)
& k4 H: S5 r- B2 X0 B% M
print(id(list1))
5 t# ]- h- j+ C
3 b" X7 c2 {( M5 X4 C: o/ h
输出:
' V* K2 \' {, }* {% v. ~
: H4 O& @' f, }6 Y. }
2150265921856
5 y/ C$ Y( {4 ?* L
[1, 2, 3, 4, 5, 6]
3 d& S2 u1 L9 G2 r" X. f
2150265921856
[! U+ t" o- u7 o9 r
6 a9 N& H) D8 d( s
. c- p3 X9 V# Y, z/ V
4、特殊的添加方式
$ X' B: s( C! F5 s. g: G2 c
配合算术「运算符」添加列表
8 @) w k# p1 ^3 A( i
) X, B. q" ?0 a, o2 |+ P
list1 = [1, 2, 3]
6 M" z9 W/ }+ @4 O" o
list2 = [4, 5, 6]
, q4 k' n; b- o6 v% y4 C
3 S" u+ }8 C* @5 V% v! s: Q3 z
list1.extend(list2 * 2)
0 x& j8 T5 Z" r8 ~
print(list1)
' L' Z& F# y1 p8 b) Y, v/ ?( `
list1.extend(list1 + list2)
/ z1 U/ {0 n6 k( C7 r s( }
print(list1)
0 S! `+ N# z ^" N
9 o8 t/ Q0 t3 R/ r& [& H! |7 z& y
输出:
7 Q& H1 U) W' v) b6 m: c1 [" v2 l
* O, ~; V% y; E4 l& S
[1, 2, 3, 4, 5, 6, 4, 5, 6]
. g% `3 ?8 ^) m" ~) Q! h, L, S- Y
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
3 G4 ]- z0 _) G9 ^. X0 ^3 o8 Z
1
4 W1 F+ J. Z" v- Y6 X8 W
2
# g6 t+ f: l$ z( a( V
「索引」取值添加列表
( S3 d: e+ I/ l8 `, H: W
3 v1 X( L$ z: b, C* b
list1 = [1, 2, 3]
/ p* s; u. E# @# |1 {
list2 = [4, 5, 6]
4 J$ Q+ G4 E6 t4 v# s6 k2 `. Z
! V3 G/ X) j; ^0 O; s
list1.extend(list2[1:2])
5 r% ?2 E( C- q3 W- s; ~
print(list1)
* m- p- t* B& w
! g9 Z0 _( G. o+ \6 x
输出:
% z- k9 m5 X) e y
: v4 q H- A; I _& F6 q
[1, 2, 3, 5]
/ w9 \6 U0 V" n# ~4 ~+ u
$ E! }" c3 ~9 L/ v
. c) Y# L$ G, e0 a1 ?( t
3 F+ y+ j7 B% g. a
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5