数学建模社区-数学中国
标题:
Python 列表 extend()函数使用详解
[打印本页]
作者:
2744557306
时间:
2024-3-22 11:52
标题:
Python 列表 extend()函数使用详解
extend函数使用详解
' j$ ^, A& ^0 }9 ^4 k, }' k. q
1、可以接收的参数
- [) m$ {/ Z; w$ z: h6 R% j
1.1、添加字符串
& U) E. I c7 D8 m( C
1.2、添加元组
1 ~8 i7 I) T! u3 E1 t- x
1.3、添加字典
% f& F' D: @% A9 C; ]9 T0 ]
2、原理解析
/ d4 A- S' l+ s; ?! M. J
3、extend() 和 append()、+ 的区别?
8 L1 s3 s' Y0 p! {. b
4、特殊的添加方式
6 `! w/ H0 ~& [: G( ~! h7 t
extend() 可以在列表末尾「添加」另一个「序列」中的值。
% B6 y5 r5 t* w+ p1 I
. f- |. A' v; T0 W$ I, m! s
语法
3 u# I7 T3 O2 E/ ~# C4 W4 H
1 R2 I s9 k) h8 T5 y
list.extend( iterable )
& w. b- r' ]( R R4 B9 t
1 O8 o, S1 {1 E* [. d
参数
7 J2 Q( ^! Q' t0 P
9 G2 p2 O$ O* v3 |% n3 x
iterable :需要添加的元素列表
6 E4 f n1 ]7 `8 P) Y
返回值
: I i, J# t/ F! Q$ i
$ t! g0 z- b2 \) t y
没有返回值,只是修改原来的列表
. x$ H8 ]# C% h, S+ C8 G
实例:向列表中添加另一个列表
2 r( s/ C. r( u6 O
1 n8 g: q) J, w" \4 r
list1 = [1, 2, 3]
0 F, X+ z7 V5 {( x- F9 R: M$ z
list2 = [4, 5, 6]
7 p. ~+ C, q1 ^9 a+ u8 o+ }
: l. p" ?. e* F; A, U
list1.extend(list2)
: v9 t9 w& I5 x! Z) i
print(list1)
; L& r3 N- h+ R9 s5 z8 \
9 o8 U; k. K- C8 p7 s& e
输出:
" ^; w: W. _7 w! c
s0 S+ R3 D0 ] w' k
[1, 2, 3, 4, 5, 6]
% A, J+ @' C9 ^- ~5 K
$ D7 S }7 ]' |/ L: X
4 U* o0 Y [3 Y5 Q; f6 n( L2 W
1、可以接收的参数
: g* r( W) M N C9 @
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
+ \* w5 t, {" T1 E
$ ^4 b$ {5 r* D3 w
% @/ Q; Y. M, x- | i) E
1.1、添加字符串
7 n# g0 |2 {1 R) G* ]7 c- B: V" B
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
2 p: R* c- I1 C1 x/ R. B, }
! S* c o' D: J9 |" |0 o
list1 = [1, 2, 3]
2 q4 v4 F- ]( t* U# f/ g e }
str1 = 'abc'
/ F7 o/ B/ G, f0 c
( T: R9 ?) ~+ K3 t% u z& k
list1.extend(str1)
( \3 E: a6 C; K! T+ Y" E/ L
print(list1)
' T. b" Q; L) J4 S" ]
4 j/ {6 K [0 _" w6 x2 o0 t
输出:
6 U6 a1 t: J6 C$ N# S' @
4 |) ^' i( C f7 o5 C! s C* k# F# H
[1, 2, 3, 'a', 'b', 'c']
, l; A1 h3 g4 J7 f5 i7 W
% d$ O* Z& D7 u8 G, i
I* V$ m! \. s
1.2、添加元组
6 `+ T( ~$ b7 z& `5 l
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
; j6 B9 L* R$ |. i# @
# s$ C: E: b' s& B( D, A% z
list1 = [1, 2, 3]
3 I* F, H( }4 o9 u8 `
tuple1 = (4, 5, 6)
0 x' r+ S) ]/ E! _2 w
* f' S+ \1 g) ]& y4 ?2 j
list1.extend(tuple1)
* O5 U3 W( d) c" N% e" _
print(list1)
. K# j4 i% T! S# {% w# G
+ _3 b9 y4 Z, U/ t. U6 a" z
输出:
$ s& _- L$ R* M4 W$ ^& P1 D
- r/ t" }5 D6 b3 ?
[1, 2, 3, 4, 5, 6]
6 S9 x: o7 |, e8 B. O/ C
" ^- ?+ j, u# o! x$ D/ v
5 }$ \! A8 i1 w3 i% L$ S! v
1.3、添加字典
9 B, j4 z& ?# a8 w) R0 I
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
# f9 M3 ?& S' @$ {% F
& o- O2 T9 ~" e2 z6 o! g
list1 = [1, 2, 3]
) R$ x/ M' B( z; ?
dict1 = {'key1': 1, 'key2': 2}
& ^8 N4 k1 s6 H, x1 e9 K
$ ^+ c# C2 K$ B! D/ D! D* Z% Y
list1.extend(dict1)
5 e3 k. S+ w2 [5 z
print(list1)
) u$ i' S |4 f5 T u$ l
% j2 ]& y5 v; _3 d) @% x( B8 S
输出:
/ g4 B) u6 u$ e( p9 V
* q! K& Q# l8 V9 z9 ]
[1, 2, 3, 'key1', 'key2']
, V- x, S8 m# a' H& }. Y6 s
% Y2 S* j" p* q, c- L' }7 e' [% b/ j7 D! L
+ R4 x8 u0 K6 c, M! r6 l
2、原理解析
( t4 _- r$ Z0 M) K
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
9 [- L3 |2 e/ r
) a" k6 x D1 N& H6 l
( F6 d! }2 t. C, n' x
' Q/ u9 |4 \2 Q" s7 p7 ]
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
: [" v0 C( V# o H3 X
- A$ V0 `3 `: |$ v8 `* v; w
list1 = [1, 2, 3]
2 d$ u2 e+ I# s
list2 = [4, 5, 6]
6 P j5 A# b: |- a" h
* z: l' c* g& r7 K. b' |3 Y
print(id(list1))
# D6 K U- b% l, {
list1.extend(list2)
1 @7 p& O6 k1 l- R3 F4 |) ] w
print(id(list1))
+ W# z6 r5 Z M
# R) ^0 y4 f8 f* [* _
输出:
- n( `/ z, m+ z0 O/ w8 w- @& q& b+ c6 k
/ ^; [' s; u* R6 J' v' b
1930566508928
! p# L5 @# {" B3 {
1930566508928
/ [' l; `0 C' [& G
8 k0 N0 S5 t8 V8 M" a
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
# O" V3 E1 P& U! p9 _( N5 G+ K h# O
! ?/ i l! N) o8 p
list1 = [1, 2, 3]
E% Q+ l! h) w/ `, L3 ~5 M
str1 = 'abc'
; j( l8 ^7 I$ o- ]2 `5 Q- q9 Q
) Z( e3 r) p3 O. ?: u9 z3 k
list2 = list(str1)
* I+ r* j9 e" y8 [7 N- e
print(list2)
0 }% Q' \, H, ^+ y, @! V
list1.extend(list2)
$ ~2 v( P7 R3 j, L/ M z* K! I
print(list1)
# y: x+ c& X' ~) |4 {& z$ ?& E( _
6 R3 X; B0 a9 b. ]$ {. p$ X: i4 ]
输出:
2 Y9 J! B. b8 e$ @5 c8 A
% q" ?, P1 d7 f# ]+ H
['a', 'b', 'c']
$ u0 f1 A9 y# ?8 `4 `& t
[1, 2, 3, 'a', 'b', 'c']
+ w0 X7 P6 t( ~5 Y
3 ]3 o: @3 P0 m) O+ N$ {
7 j2 Q, C% r/ t" n0 g* ~
3、extend() 和 append()、+ 的区别?
* k K; g, @% m* r ]. J' Y( C* W
以添加列表为例
6 |/ W& C1 ^, D3 U( K6 c& j o' C
2 y) b8 d4 Z+ G
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
# J. {8 D, v! t+ P
0 [4 ]% Y; ~+ {9 c0 C; T# h( w" b
list1 = [1, 2, 3]
# L* s3 j( P3 l8 v
list2 = [4, 5, 6]
( E* p$ ~0 Z9 ^ K0 S0 `4 N
( G" D; ^$ c; o7 t1 m
list1.extend(list2)
# D# p' [4 d: c
print(list1)
! {9 J1 l' \0 s) r. t& { ]
. Z" w, T) W/ B9 m5 Q1 }$ z$ z
输出:
3 L% @& k* B$ [( T, Z# Y0 Y+ r
- J% A5 v* H7 j1 D ]
[1, 2, 3, 4, 5, 6]
% h& ~) v2 g- V ^3 R8 y
1 q4 M5 [; O5 k `& c4 M
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
& F. H! c) M6 s& f% k# l7 K
2 f8 c9 T! Q# d8 b" F+ x9 B" Q
list1 = [1, 2, 3]
% b8 @( R4 p3 @5 N6 H
list2 = [4, 5, 6]
( }, ^0 z% [) N! S& o! Z1 @( x
' p7 z% w( l" v( J
list1.append(list2)
/ b c6 D0 V; N: ?9 v$ F6 C
print(list1)
* }0 k0 \! Y/ [4 C9 W+ U
$ ~. @" H) I3 Z! _5 h* ]- S
输出:
: I& L1 _$ n" b+ U4 |' y0 X; I$ U
$ {0 R5 J9 F* @- y( v* T' B
[1, 2, 3, [4, 5, 6]]
7 C a- |) v" N4 n2 O- l
& U, D& n- P! ?* f; h7 a0 |
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
, L5 u/ ]+ h& j' [
, b- i B. v, ^
list1 = [1, 2, 3]
8 t: N" s" Q/ z
list2 = [4, 5, 6]
9 @' y0 d0 ?% K$ u N
& o; g5 e1 P# |; c4 ?; M
print(id(list1))
% U, [# X) w" W% o3 Y9 P$ b
print(id(list2))
+ g. V4 T) p+ r
print(id(list1 + list2))
, I, z2 n( q& Z( R
2 x/ \) @. M: Y W0 @; a7 k
输出:
1 J) ^3 g$ Y% e
$ ]( O, K8 {# ~! H/ }" @7 V! k
2680876376448
% T' Q- p8 ^; P/ C' b7 b
2680876376576
" K6 l [! V* T7 ?- y
2680878544128
9 x* {: L1 _& t* Y' q( c5 p
2 e' d! V; m" B' Q0 P! B
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
- i J1 _3 D% z( i! D7 [
8 E8 j; y/ w- ^1 U" t; _; y
list1 = [1, 2, 3]
% g; R2 t; X4 A
list2 = [4, 5, 6]
7 q$ S @4 V8 Q+ l
print(id(list1))
* @; l6 \' D0 h; |4 Y! A8 V- g$ F& Y
list1 += list2
: L4 l( i4 s3 _3 Q: [
print(list1)
% e e5 C. v3 @
print(id(list1))
- W. d1 n+ t. J4 N0 u' _
: f' _$ ~) c( q. P, d1 O
输出:
5 }& u! ]& S9 i9 L" h6 S" ^4 F8 H. U
' y( {( z' m7 u) { P0 c( a
2150265921856
4 G# R; ~ c, F( }' b
[1, 2, 3, 4, 5, 6]
" Z( k# d, @, O/ `0 w$ {
2150265921856
/ q1 [$ l. P: H1 v! P
( X0 f2 [' D/ v: }# A' r8 `
! V6 s" z5 D- R7 A; h P3 x
4、特殊的添加方式
1 w4 L2 {9 V# l7 @2 k2 a. f! o- p
配合算术「运算符」添加列表
/ k0 d* ?% o' j4 u" T; F+ P! }
, b* m2 l7 b* ~9 X& x
list1 = [1, 2, 3]
C8 R0 V7 K: H8 t1 Y: ]
list2 = [4, 5, 6]
( p- i1 ^) b! |% X) I% w/ S" _6 }/ y
, g$ m4 @! O1 I
list1.extend(list2 * 2)
& G/ i6 x/ A! n" `6 Q6 \- Y
print(list1)
5 V8 q7 G# s+ d/ g
list1.extend(list1 + list2)
& c. ?7 @; e! t" o6 P) `0 h. X
print(list1)
4 h5 o5 N# U; m
' Q- l5 _6 f, B& f0 u! A
输出:
+ H! i+ x4 i* ^0 D; u' a* c
* _+ T2 R3 _9 p+ p: n$ w
[1, 2, 3, 4, 5, 6, 4, 5, 6]
* R+ ^% i* G% _+ T3 ?6 J" N$ R9 _
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
1 x! e) t" p+ h! U5 S" o
1
4 t" _1 p7 l/ @- `" r/ o
2
& h3 m3 M8 T% n% P- B
「索引」取值添加列表
5 A6 g$ y3 A- l; b0 ]$ W7 D2 y- k
% G' H8 i; f4 z# m
list1 = [1, 2, 3]
) N' q* z3 R" @' b
list2 = [4, 5, 6]
2 f( H* g+ l A( B) l5 A1 ^0 u: f; o
; k& g/ T6 @: D5 Z" J0 X) ?$ T+ v- Y
list1.extend(list2[1:2])
9 \% Z1 N$ V% v5 r, V
print(list1)
! H k5 U* B) W/ z' T
9 t* d4 H3 ]% m' ^& O' ~" v- c/ r
输出:
$ R) i, T! N1 j
6 I( {; B7 |) q. O& H
[1, 2, 3, 5]
) \' i4 L" y1 l% k; B' Z% G
! t, X }4 C' Y& B0 B" W
# ^4 l" f- Y# S, J4 \# |* I
& ]9 x* H3 m, A' O' S2 x
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5