数学建模社区-数学中国
标题:
Python 列表 extend()函数使用详解
[打印本页]
作者:
2744557306
时间:
2024-3-22 11:52
标题:
Python 列表 extend()函数使用详解
extend函数使用详解
# ^ N8 a: t# B; {6 m
1、可以接收的参数
/ D8 e8 U& E2 G8 {
1.1、添加字符串
5 {6 y* G- G8 q! U# W6 Q* ~
1.2、添加元组
- x( y0 G# w$ e4 x0 w
1.3、添加字典
2 n) L+ `4 Y, G' z, e' E" U) u* v
2、原理解析
( I, n1 e% q9 @0 w
3、extend() 和 append()、+ 的区别?
- b2 D) W0 _! g' n' J- J1 j2 i
4、特殊的添加方式
5 @: h, D1 x5 ^2 Y& _8 Z
extend() 可以在列表末尾「添加」另一个「序列」中的值。
. a$ B* s1 \0 R& k/ @* Q' a$ I
1 D- d% W+ y# j0 k5 \' a
语法
4 a( g, _/ V5 ~8 j5 p$ S
7 i \4 Y, M4 N! R" ^/ G
list.extend( iterable )
. J" x/ ?* Z) @# N# ]4 a
( q( [9 u* S. g
参数
6 O# {- Z' P8 A; Q9 P% n" H P/ \( }
' O [) `) T: V& S
iterable :需要添加的元素列表
) \, `0 c2 U# y9 t: h
返回值
5 P. c# A6 | M0 a; f
" j% K, D. z9 |1 p) @! J
没有返回值,只是修改原来的列表
9 V0 ]/ p* F% V; f
实例:向列表中添加另一个列表
7 n! u" ^/ U+ R! k1 J$ c% x
# y$ J, M$ w& }& a( w8 M, i- Q0 @
list1 = [1, 2, 3]
0 G) f4 ]% D! M
list2 = [4, 5, 6]
/ `. Y9 d5 w( w( |2 J% f
) K- Z* c) u3 N7 [# ?! [: v
list1.extend(list2)
6 q9 a2 @- O1 S" U$ E$ s2 E
print(list1)
, \& X9 A c' j( P! c
6 o% l! u a7 E5 L( A
输出:
/ t0 R* a3 w3 O9 u
( r; ?. x0 D& `- P- n
[1, 2, 3, 4, 5, 6]
^( A* Y/ K: K0 b' t# d# P
$ [* P$ {) p+ U
$ j7 ]3 g( S' P: f3 h
1、可以接收的参数
" J8 _* v6 z1 r: L
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
2 H; H& c8 O4 M$ e
9 W( s7 V- h9 z" }5 t
: ~2 p, F# Z5 k6 X. |% ^
1.1、添加字符串
. ?. w3 i, B& D- A8 U7 w
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
5 i2 V E) u% r1 C f" ?9 B
9 A: y" N9 d" L+ ? N3 P
list1 = [1, 2, 3]
$ e$ T- |7 N- m# n
str1 = 'abc'
% W$ X6 l* ^( v$ w- R6 ~
! Y9 {! h. Z/ D( L
list1.extend(str1)
1 n) _* {2 \' I) K5 L& l
print(list1)
. ^& Z9 e3 f S- I4 n
# k- L' H) s0 y2 g) X
输出:
1 X% n" l/ R; s
6 P# ?; ]8 x R/ [# s9 ?5 U4 b
[1, 2, 3, 'a', 'b', 'c']
^1 y" @2 w& |
# r* L# N6 i8 x6 a: s/ R
4 o6 R) E& _% o# S! d1 J: _
1.2、添加元组
! h1 ?% Y) s/ [7 L9 F* A
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
0 x' b2 m+ s8 J8 \
: h! g+ S( m5 F( N T- ^4 j
list1 = [1, 2, 3]
& J9 G/ x$ n. s: \+ d
tuple1 = (4, 5, 6)
; V( c P, y8 Y% m9 m
$ f/ ^8 n' k1 k; |4 y
list1.extend(tuple1)
1 B; Q# l4 |* T0 j% N& B9 O
print(list1)
7 Z, S: \" ?! S0 L3 d2 ^$ @# D
9 J4 H; z# |1 e5 F
输出:
% ^1 g3 I1 L2 u2 d4 q
/ g+ S+ d8 D+ y
[1, 2, 3, 4, 5, 6]
2 c( V d+ u) r' X5 c9 P" Y
/ M9 D: s' M& o% z0 m( W
* E9 o, y' [! |- {( o* L5 p- g
1.3、添加字典
\4 u) R6 ]: y# U- X4 t/ {3 [
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
. @+ m; o$ B) j& i8 l
1 F" ]0 Y9 X& x N' R2 _
list1 = [1, 2, 3]
c) q' B" | q" x' m- ]4 T
dict1 = {'key1': 1, 'key2': 2}
1 f1 e- v# x2 e! \
* @/ X7 g! S7 T" m' c
list1.extend(dict1)
; L! B7 n! p ]1 V$ A! e% J' Q
print(list1)
: b0 p3 I. L9 b8 ?; T7 ~
" N4 }3 U' H& z0 o
输出:
4 e; j# N4 [5 D& k+ s
7 Y' e# d9 Y4 e+ h0 X/ C, }
[1, 2, 3, 'key1', 'key2']
4 Y) R' t- n- `
& u$ A* {3 c* o" ?" `7 F F
* ~0 K; _7 P5 L! l; F9 ^
2、原理解析
; V# }* M! U7 w, ^9 Y: B1 m
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
5 S" Z! L/ C" A# o) Z; |' ^# P
5 K" y9 R) x7 G: O/ u: {
1 h! N" m( _) m& A( l
+ X0 K* \. b* f0 A2 y0 q4 f: o1 b
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
Z* n! N) N1 }' V
! D' u$ ?- t& }
list1 = [1, 2, 3]
* w- J& c, d" s9 m3 x+ ~ K' t
list2 = [4, 5, 6]
8 s! M1 a1 r+ u9 {' c8 C u
8 v; @) y5 K& R4 E+ ?2 p5 G/ A4 j
print(id(list1))
( J! ~6 u2 I* f; ^5 L( u$ A- o: ]
list1.extend(list2)
# X M; G4 x& ~: Y
print(id(list1))
& }/ Y/ c9 a0 `7 [! f
4 |$ q9 o; F. h6 s6 r$ i
输出:
1 I+ ^4 x5 q1 D3 ^$ I
; l6 U% G. s. D% E$ Y
1930566508928
5 m5 _ v* q _9 W% l
1930566508928
: E% T7 }$ c( X8 d% m" ~% d' t+ m1 z
3 j+ x7 `2 s4 ?" x5 z8 }5 _7 Q# U
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
! {; g. ^; G1 d& O
7 K7 q/ T" e8 A6 L7 n; a
list1 = [1, 2, 3]
( \, W! I+ ~& T2 m* G
str1 = 'abc'
7 u- ^ o4 n9 u
+ }# l0 Z% [" ~* [- F
list2 = list(str1)
- s1 e% D" d; b! Z9 R4 f
print(list2)
# U3 I' K/ |' z8 z$ O- A
list1.extend(list2)
+ H0 e+ s" x9 g. |) q
print(list1)
& V) x7 K5 T3 r/ X- [4 ~1 r
& u6 G! M# D3 H& y+ g$ u+ {" J
输出:
2 s; @$ o. `% n+ u$ b6 C
k& Z3 N: @4 y/ p
['a', 'b', 'c']
8 |8 z; ^1 f% \3 n
[1, 2, 3, 'a', 'b', 'c']
5 O# C% [# m, S# U
7 V; Z9 E+ ~, z
0 N/ p2 [ [# n6 B5 a( b8 o$ T7 b
3、extend() 和 append()、+ 的区别?
( [+ A' K. o6 T- K2 Z8 _8 B
以添加列表为例
: C# W% _6 S6 z$ ?# p3 a
' m$ D; k; n! }# `7 X4 l9 c
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
1 w/ f6 A9 ?( _, K7 |
4 ?- S) z4 o! m) s9 z
list1 = [1, 2, 3]
3 n$ a- I, z3 I/ d; i1 W
list2 = [4, 5, 6]
7 B1 V3 S: d: i `
+ `5 @/ g. J1 H$ F0 }8 N% d
list1.extend(list2)
, q6 u, \0 U t; t! V/ J7 U: @5 S
print(list1)
! r) H+ W" M! e5 T% W# v& l! Q
3 R+ E) S% y' I. u( c: {$ q
输出:
/ `: F* H( Z$ c( q- n
& g+ J, a% e* E1 |5 s' [
[1, 2, 3, 4, 5, 6]
8 S+ w1 g. X6 Q! M' o* D2 V
9 {9 e6 [3 Q+ O7 H# J
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
- ? r! j# F7 x! H; U
& H" \" l' k7 H2 U8 l6 \
list1 = [1, 2, 3]
9 @7 Z1 b8 Y/ a. v
list2 = [4, 5, 6]
; {! a" [8 q0 r1 D8 D& V
% V8 d/ o( }/ s3 R
list1.append(list2)
- W( j4 z* l2 K9 X
print(list1)
7 w( B# N* l) P1 f
1 Z+ ?9 W, R2 R3 [1 j- Y* s
输出:
9 B4 v/ e r" u$ @- a6 K% K2 r
: a6 F2 o( V/ @) o' b
[1, 2, 3, [4, 5, 6]]
2 ]5 I$ v# k1 _9 d2 }9 Q
/ b* \' @+ t9 r% B
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
, Y* f7 d4 X" p) K) E
" Q" k. P$ h" }1 M) q
list1 = [1, 2, 3]
9 G; V5 G5 c- q
list2 = [4, 5, 6]
) B! U# X3 r" r Q/ D( T9 G% A
" q0 i; {1 t- y7 [+ @
print(id(list1))
/ @* ~+ C" x! g/ Y; |" N k
print(id(list2))
q- r5 j) a( t
print(id(list1 + list2))
( r9 t& o. ]" q" o( I: Z1 N
$ q+ [% p u3 E5 }4 t' a* y
输出:
" C! {3 W3 U* o) q) J6 _
: h/ n, l) j+ g
2680876376448
& f5 F4 I) T9 A! E6 y' u4 d
2680876376576
5 G3 `+ s" v" g3 p
2680878544128
) {/ l2 [" _3 W o5 N
% R! R5 e+ ^' ~' `. m8 G
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
/ E( d! R- E4 `" |
/ D& i2 @# z) y' z
list1 = [1, 2, 3]
/ S3 K! S, [3 X- q
list2 = [4, 5, 6]
+ f) M" u2 f" P% X6 e) r- Q
print(id(list1))
. d6 z' `% @3 g" [
list1 += list2
, c3 L( x. t! w5 j e! \/ a* a' Q4 t
print(list1)
0 x6 l! {/ P; p& H1 P; \# P
print(id(list1))
8 Q) O) T3 J1 `( j: m! _& ^' Y
/ ~+ n( e4 e+ O7 r3 r h
输出:
- f: U# s/ N0 v: Z! T' X4 \
# i0 K% m. s) J' n9 v% S& D) t3 T0 ^
2150265921856
5 I0 n/ C5 `2 k) p' l
[1, 2, 3, 4, 5, 6]
' A( c6 \1 G( J" h& n0 w4 P4 {
2150265921856
. I; [8 V8 f+ N+ O
H" _0 X6 O8 w! ~# ]8 w" x6 ]% ~
3 G1 B8 ?0 Q3 c# l. I' [6 k2 K4 v
4、特殊的添加方式
$ T& d0 F, Z: @6 J# ~
配合算术「运算符」添加列表
+ Q/ x. f9 s' |% ^* }0 a. z+ D/ ]
- X- K5 Z- t7 C- _# ]5 Q& l& S
list1 = [1, 2, 3]
# Q. D% r! _+ _, V( i& A
list2 = [4, 5, 6]
+ d2 W% ]% r0 J6 @
2 Q) N% r6 |/ i* \3 \3 Q6 G+ d5 |& o
list1.extend(list2 * 2)
& m& i$ ?* U4 v- B# F! V) G% ?, v
print(list1)
& y8 w, E2 L! J5 c
list1.extend(list1 + list2)
; Z$ Z, u+ f. ~& v. U4 _
print(list1)
3 t% [* B6 u3 O) h5 S: C) F2 B, I
6 k! r) @! j, [
输出:
3 ^+ ?4 y. y# s( o9 r( O
9 X; F0 y: l; r# m
[1, 2, 3, 4, 5, 6, 4, 5, 6]
$ G9 K" h3 i. ]
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
9 @4 e K" F. c
1
7 M6 G* x) p8 S: K2 `
2
$ L p; _! y7 W6 k2 I5 z2 |6 H
「索引」取值添加列表
: r9 h! F. {- m; h1 u' h
. Z' ^( T% s: L+ |. y; d; W6 ~
list1 = [1, 2, 3]
: l0 ^2 a8 E" B9 O0 ^
list2 = [4, 5, 6]
/ h' m4 G" c! s* O% w2 t+ Y
& F, T/ x0 b( b- }
list1.extend(list2[1:2])
& O% [- \; I% k
print(list1)
3 I# b! ]# G8 C7 K
4 S- X: p& s- X
输出:
# d% U" }0 d3 {# ~4 P, x# h
* r. q: K" v* T- B) l9 d$ d
[1, 2, 3, 5]
4 R; _: [- l8 J6 N, h5 x3 {
5 F w8 ~1 O3 q# d, \( q' M
8 `* H9 }* E) [- v) d* U
7 N- @* n/ {% v- k% H4 @/ W% c: L& `" _$ @, h
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5