数学建模社区-数学中国
标题:
Python 列表 extend()函数使用详解
[打印本页]
作者:
2744557306
时间:
2024-3-22 11:52
标题:
Python 列表 extend()函数使用详解
extend函数使用详解
% c1 M1 ~1 A: Q6 M. w# a% q7 y
1、可以接收的参数
+ j1 a/ t3 E6 s3 Q( b+ s! K
1.1、添加字符串
. ]( ~: o& h% ^! E
1.2、添加元组
! N' t P& U, f, O
1.3、添加字典
) J! X/ G I2 E# `' T' r+ H
2、原理解析
) }2 @, q( L: b* W
3、extend() 和 append()、+ 的区别?
) ~: S5 K8 _* Z3 Y+ T2 w. s8 a
4、特殊的添加方式
/ }$ J( [# F5 L- w
extend() 可以在列表末尾「添加」另一个「序列」中的值。
( f8 y% m0 U' T% W" @, y: c6 U
7 ^! I$ }6 a/ Z1 C% {$ H. M
语法
. j5 e# r0 |% O0 s( w8 E
1 `7 ^- t( @$ `$ h) A. n
list.extend( iterable )
u+ t7 {: Q) H L) w. w2 |
' m, q+ J' k' D/ ^5 X8 u
参数
7 D& t7 R/ T6 e
* Y2 J. Z- G( P7 {4 \: G
iterable :需要添加的元素列表
' D# E* z q. a
返回值
% A( u4 j4 e- n
. c9 C0 ], ]/ H( Y4 l
没有返回值,只是修改原来的列表
0 B! Q6 W' d/ S& v& Q: o& j
实例:向列表中添加另一个列表
7 w+ S$ ]8 s; _
; i+ z- f1 l* x2 Z0 c. Q
list1 = [1, 2, 3]
" n7 d9 [+ A1 C4 U) {
list2 = [4, 5, 6]
& Z( d" d2 F' O. j8 b/ g( }
, O: S( x% G7 D/ G
list1.extend(list2)
6 z$ d* F/ \- ?3 W. R+ j# p3 P" i
print(list1)
/ t* V5 q. y0 K
# }: D& a+ Y+ n. w2 m
输出:
. K+ f7 W; {2 Z" X: U# M7 n1 x
% X- t& E3 U& @
[1, 2, 3, 4, 5, 6]
# S5 ~% x* O! Y) j
4 \: M! F& _) X z* _8 ~
& A" M% R# j/ S. }6 P5 j- o3 {
1、可以接收的参数
! M% d( I# o: g2 b1 L5 N
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
1 x' |7 T; A7 k e
2 S9 I% z1 S/ J h$ t7 y# \& @* [
/ W3 T0 k! Q# n8 i+ M
1.1、添加字符串
0 ^7 K2 m; Y+ y1 |
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
; G7 ^) t+ N* {7 h+ T# j+ J+ B
: F6 u9 r) E& c, _# D
list1 = [1, 2, 3]
7 V( a' o! @) u, z7 u# a
str1 = 'abc'
$ h' [! P3 W- o- v6 R
6 _' X9 R- i$ n+ Z1 {* z1 z% n& r- u
list1.extend(str1)
2 v4 P# k. J& O
print(list1)
: ^+ Y* U R. u' S
' `/ Q. r u' y
输出:
# Q" E* I; m, I
+ w4 T0 ?. |8 v9 B! R( |* f& `
[1, 2, 3, 'a', 'b', 'c']
1 C2 l& K) s# W* S% e2 Z! ^9 j
4 k& [% p. e; z$ b2 Q
% f0 J# U+ C4 N0 n/ v+ h% g
1.2、添加元组
% \5 {9 S9 s# o! a, j" Y% x$ f' q8 Y+ F
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
( T5 W3 X5 Z- F4 e* @4 @
( y( }, p8 C1 i. X+ {
list1 = [1, 2, 3]
2 g& p, o6 Y$ C. a) H. b$ {
tuple1 = (4, 5, 6)
: A+ ~8 K) I9 p8 y0 M8 y
0 a* u8 ?" }+ z* N5 \
list1.extend(tuple1)
' ~" K8 ~' J2 a& L$ ^) I
print(list1)
. T) s* G Z% l# _$ o/ i
) f1 [1 g) \* N7 {; o, S# l9 ?
输出:
x' G, Z" O8 a
6 f! g: i% G; g8 D
[1, 2, 3, 4, 5, 6]
5 ?, C: C% N" g2 W3 |
) I" H+ i' D2 @0 x j) L0 a) R
3 R8 |) y+ X' i, @& o) ?
1.3、添加字典
! l, U% `7 q2 p$ _' f0 P
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
; \7 b l _* o
7 F0 D( b$ C9 d; A" Z
list1 = [1, 2, 3]
- k1 g- p; o* \2 H% C& O
dict1 = {'key1': 1, 'key2': 2}
+ [8 j2 ]2 `: L) n) }( E" i
" [: m( ?1 v0 R* M* X5 l0 S. ^
list1.extend(dict1)
; u, `4 W2 P. v
print(list1)
$ n7 ^4 @' u& O; g7 d
3 ^/ w/ L$ \: k, O- ?5 ?
输出:
' T! B! Q$ t5 i/ h3 W0 I
# l& e9 B( z" Q! j
[1, 2, 3, 'key1', 'key2']
\4 ~3 P" R& Z0 v3 u
" x& `: k1 B6 N: ~# L. N, A
( |$ D- b1 Q& T8 C0 V9 N
2、原理解析
" ?0 }: B% O3 s2 H$ V+ D
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
) D1 k9 h: s3 z; x @9 {
, c: J$ f+ U1 w7 `
( s6 I) N- y( n
- S$ o2 q5 R; Z* B5 b# n6 I
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
z. s c4 [2 w3 ?2 R
6 L9 a2 |7 G- u' S+ [$ H2 h
list1 = [1, 2, 3]
2 C, U, N E0 Y2 V4 n, D, u
list2 = [4, 5, 6]
0 p* t$ G8 O5 w" g0 M! \
. y2 }$ V3 [( L0 ?5 [5 n* u
print(id(list1))
0 T8 J: s( J* O4 u1 ^9 S K7 r
list1.extend(list2)
% `. @, B+ Q* e- ~ H7 H7 [
print(id(list1))
! F' `, l% ~' q1 w) X' h
. p; F' V6 J2 g+ w! k9 n5 o; B* c
输出:
6 |- z2 ?9 S7 w* B3 }
4 s5 ?2 V% p& q" D
1930566508928
+ R6 O8 ]2 y8 j; @
1930566508928
6 u0 S3 y6 [1 L
3 e t* W2 ]3 ~- w
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
4 g( U& G: D5 B, m3 S. H! k/ Z
2 a! ?( K$ T, c+ }$ D- F4 P
list1 = [1, 2, 3]
1 t( v; O$ h9 {0 L
str1 = 'abc'
4 g, `5 R3 R5 F8 a+ ?) @
; _% m+ ~$ {5 h8 k- F6 d% o: v
list2 = list(str1)
" b- L2 i6 |. F; X
print(list2)
; w) r0 U" M8 t/ w9 i8 Q
list1.extend(list2)
% W9 {$ s5 R$ ] b/ A% a$ I% [
print(list1)
- e; x9 ?. X7 }$ }5 b2 w4 q w# _% E
4 b" V2 t# |* E: k5 D
输出:
9 C+ V' f+ V$ o0 ]5 k# h" q
* W$ r2 `; m& z# L% c$ g/ g0 D
['a', 'b', 'c']
. d) ], T. P9 v7 e" w8 s& y
[1, 2, 3, 'a', 'b', 'c']
8 R. h/ [) r5 P# v w3 `" [
; P0 {8 `. A; ? {3 ]
7 D* O' K9 S) V
3、extend() 和 append()、+ 的区别?
) F3 ?! q- I' i6 i) b; y
以添加列表为例
# V' _" }, P* I |1 ^) o
+ ^# t# j- a3 m# }
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
U* G# N; r) d3 y9 q' o8 |6 c' E
" T: v) A1 j0 }' y8 X. t- S
list1 = [1, 2, 3]
; X0 `; X0 V2 F3 F5 ?; c
list2 = [4, 5, 6]
- Z3 E8 |+ F3 Y" e+ h
! u5 q X. M7 N: S, G0 W% @" a# K: m6 y
list1.extend(list2)
. u/ s. ^# {* n- e/ X
print(list1)
2 {7 [9 t" \9 r- e+ ?) O
3 ^% ]9 Z2 R+ o0 ?) R+ T2 S
输出:
6 J; Z1 p6 T b) K
2 H! f P1 M; @) v2 ~" Y
[1, 2, 3, 4, 5, 6]
% ]" I' ^/ O! ]
, t; z# x7 F2 T" o$ ?" E; D# ^
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
l& O% q5 a; U9 u. B$ Q7 r- W6 W
5 P# `8 r$ C' H& p
list1 = [1, 2, 3]
% n1 t2 J0 U( o
list2 = [4, 5, 6]
6 K+ y, d; y! j& k" E& o, |9 J# ~3 n
2 F9 \+ V+ p+ [& r
list1.append(list2)
* b2 X" Q- Q. {6 h2 F
print(list1)
6 G- E# C$ }+ B& |! R
. W! }3 |- a8 x2 v+ g" l: }" O
输出:
1 L0 ^( ?5 e2 g3 c( w X
/ _' V" S6 @2 r9 E
[1, 2, 3, [4, 5, 6]]
$ `/ V }; H S8 D# |* J
+ l+ s/ b, f% P( i% C2 L7 l9 `8 P( [
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
& A/ e9 K4 r$ S" A
8 B8 ^% P/ k6 ]/ J2 G* B0 [/ i
list1 = [1, 2, 3]
# n8 p1 G. m" q+ R2 b' h6 d
list2 = [4, 5, 6]
7 j* R h$ F6 r+ X
% t1 n0 U6 B; H6 q8 l
print(id(list1))
& Z! R( C0 V( C6 J" t
print(id(list2))
- p! [/ w0 ~+ `+ z" }) }
print(id(list1 + list2))
. K* a# M1 s; z0 ~' {+ X/ i
6 x( z6 s* _! p2 ^
输出:
* F& W7 [1 C$ _! q w# y) g
5 d* S, I+ W5 B W& w5 c+ C
2680876376448
4 v. g# w: w j7 I3 y% c
2680876376576
/ \! |9 k; S% b
2680878544128
: \! G4 C6 G3 ~9 ]! @
) q3 v a6 X+ H
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
& O' p# [1 R4 ?! B
% y8 w, [) _7 r, `7 Q7 L
list1 = [1, 2, 3]
* e2 a0 k) @/ S
list2 = [4, 5, 6]
. R$ }- w/ T$ j$ r" K/ @* d$ h
print(id(list1))
, ?* l3 L# h0 V0 A3 m1 J# x2 s
list1 += list2
% j7 ]- f: Z4 l0 r x+ P- y$ D4 V
print(list1)
( R) e: @* J7 ^9 g6 {: W5 B' t
print(id(list1))
* z! s9 x& O2 O
" v5 U+ U2 Y4 ~/ L( m( ~
输出:
$ {1 ] T) z/ _/ ~1 {' n& E- J
6 t9 l$ i# [* A' M' D
2150265921856
; R; r- Q/ N/ n( ]6 G
[1, 2, 3, 4, 5, 6]
% H, B' P. J( d
2150265921856
9 _# G1 H8 i/ \1 d- }/ s, T3 K/ Y
y6 a1 n. E2 m$ {. \, h
8 V& M9 ?+ F, t' l
4、特殊的添加方式
( [2 I* T: e8 }
配合算术「运算符」添加列表
6 a8 T9 K) b I1 U/ D8 b' f
% a7 E& s! J# w) i. {* O! n. Q
list1 = [1, 2, 3]
+ b! y( O; g& t% A* y% N" T
list2 = [4, 5, 6]
7 O d2 l ?0 i3 T: G
o( G, T" z0 y3 W. f
list1.extend(list2 * 2)
( x( O' k" a& s9 `
print(list1)
% r+ `, D+ H. w1 t) ]3 Q2 n
list1.extend(list1 + list2)
$ U& e: u7 t2 f( ^/ [) \6 r
print(list1)
5 ?) J7 t- g. H( I/ V0 V
: V5 ~8 _$ x4 [7 E; N: \2 q
输出:
$ U6 s [' z4 |% @9 A" r' B! C1 k
( N5 \' x3 i: |$ @9 |, h
[1, 2, 3, 4, 5, 6, 4, 5, 6]
+ B" g/ f8 G& v/ t/ d* ?% z
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
/ o& u8 ~1 W& ^+ D7 f/ Z8 T
1
, T! K/ }- j. T9 ~6 p
2
! j y! {4 W" h8 O+ @% [
「索引」取值添加列表
4 O3 J4 E8 ~. P
7 ~% N( o, f$ o z- u) l
list1 = [1, 2, 3]
& X# @/ K" o" i+ }; [+ j
list2 = [4, 5, 6]
/ w2 |$ B( V7 I4 | ]" N* k
4 h2 M# q5 p/ x1 N
list1.extend(list2[1:2])
4 s& I% r, M; n2 w6 t* H+ p
print(list1)
, [8 _2 z3 b3 {0 l# I
4 k5 u; j0 W5 f5 [% I' Z! ^
输出:
% S1 \( _2 b6 S( S
8 M- {1 Y4 J) B3 Q! e7 O
[1, 2, 3, 5]
# I! U& j! N$ w4 F, s& E8 R
) {1 c" \- a# I% A$ `, x+ T0 w% w
* t }: R9 h8 s3 S: r! A8 t& l1 t5 [
" n4 i( |7 H m
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5