- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
extend函数使用详解
1 }9 o6 \& G# M1、可以接收的参数 T [! k9 d$ I6 A
1.1、添加字符串
& B. C: C2 _+ F1.2、添加元组
% O0 l4 {2 S8 [, o3 M/ O. H- x1.3、添加字典
2 G m4 B) p: R2、原理解析; D3 @' q/ q5 F% L: Y4 v
3、extend() 和 append()、+ 的区别?6 _% O# w1 [+ ?9 b0 v- |
4、特殊的添加方式
% T, u" F) f$ B% Uextend() 可以在列表末尾「添加」另一个「序列」中的值。
( _2 I, j! i! y/ A' m$ K% @0 P# F5 O* U8 C
语法
3 C& {5 I0 B- L3 h( y
, t: D! J) Q r3 klist.extend( iterable ), k0 U3 R; X8 q/ G J
4 c/ _# a; [2 ^: v/ F
参数3 {! N. Y7 s1 l, u2 s7 [ j2 H
, i! _2 Z9 S$ S7 B/ Viterable :需要添加的元素列表
' y; N9 K: @- |8 v5 t# x2 I0 W+ {返回值
( r! Q' G/ A W$ l! d. S) ^; w) i4 K' L8 g) g# {6 a. O
没有返回值,只是修改原来的列表4 I0 H" |7 @ h. i7 I8 [$ R9 [, V- ]
实例:向列表中添加另一个列表! A6 S) E' C& j) n' A% f+ _
; r' G, y- e4 p; Q, r& A
list1 = [1, 2, 3]* z4 T5 @" d+ \/ v) q- e' g: b( Z
list2 = [4, 5, 6]
# {, X R( {/ d
4 l5 M6 z) C* x* R/ dlist1.extend(list2)% R1 ~6 ~) a! w$ L& D* F, G
print(list1)
, i+ @+ Z$ G, d6 W
( B9 A% W+ h, x, S输出:7 d! S6 D# a m% z9 P7 {' m( o8 Q
# ?( u- a3 w3 P }[1, 2, 3, 4, 5, 6]
% v. X2 R1 W( a1 T2 }3 S- r ^$ Q$ X% I
1 w) E, `8 E r( \
1、可以接收的参数
+ B& c' F1 f' W9 m, {# C/ ^% sextend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
& X, L; `" G) Q$ m3 R* f; j$ n' D- Q& w" W; a
1 E F1 B: l4 }5 U6 e0 s! P! A
1.1、添加字符串' x4 A( \ d$ h" p9 K c) v
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
2 T! n6 k/ i5 Z( q$ j$ l9 s' ~$ Q: |, }+ H' Q. v
list1 = [1, 2, 3]
' }+ E5 u5 e0 _7 L0 t2 f& k( kstr1 = 'abc'( q$ f6 [$ c1 A4 U% P6 b; s
) n) ]/ @7 e- q: _list1.extend(str1)
0 A6 C5 R0 f( G+ K4 G: Yprint(list1)
3 g% f& i! j0 ~: [& |3 _" B9 i7 @" ~8 f" S7 b
输出:+ n% z# |% ]: d7 u. i# E: D# N& C
: Q2 P9 g( F" A" t
[1, 2, 3, 'a', 'b', 'c']" f4 N' L9 ~, Y- }: @* x
B$ r0 i4 Z% h+ w/ U/ j
$ C# v$ Z6 g' S; J2 x1.2、添加元组- I. N7 m, E: T+ j2 B; p
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。" c; t4 y& G0 I4 ]! o
( S" A* ]1 Q2 _& U( olist1 = [1, 2, 3]
( q2 y; W' x% O1 y) I6 K% otuple1 = (4, 5, 6)# n5 B2 H6 ?! Q- A
9 f8 `8 P4 Q A" c4 s9 P8 t
list1.extend(tuple1) e& ?+ K% e# V
print(list1)
& |) V3 }" I% }( r) j
% E1 y# B# n' ?( w输出:1 R A; d0 s" O$ e: R+ Y" v8 L6 k
! h9 h6 u+ _" T% h
[1, 2, 3, 4, 5, 6]) \" y* }3 K7 Q y. R/ _ _
2 u& D0 {$ _7 m
! _* x7 m: h4 z! f4 _5 H" C1.3、添加字典
7 k7 p! U, G; f7 `: M* o7 J4 Cextend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
7 l/ ^) M. m7 h& x$ U" ~. R
- z4 D0 x# G! a% elist1 = [1, 2, 3]8 m( b! x6 u& }. b% g" ^, b# u
dict1 = {'key1': 1, 'key2': 2}
9 |$ C6 C2 \# p' t2 Y
" Z! p8 J4 f9 dlist1.extend(dict1)
# T4 q' X) d, o9 W* f3 M8 k/ @+ Zprint(list1)& E2 D8 F4 w; ?8 a# b4 [
: H$ @5 Q5 U+ W4 R0 j/ J
输出:3 B4 E- Z9 b! b7 ^* k
) P5 N0 J6 P( k7 o' }5 ~: F2 U
[1, 2, 3, 'key1', 'key2']0 M; R2 D5 W4 r! ?
) T P' F! x U3 O- e
0 H# `2 N+ O: Y- z# a/ [( ?
2、原理解析9 G6 [$ N; |* E9 ]5 E
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
" u( s+ k" I/ U- m& x* ~- d' b) l: t! u
9 ^1 ?1 T+ M( _" Z* r
5 r. K" D5 E+ {1 h: m1 B5 D4 r我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。7 f+ M& d" T, |5 z3 _' }4 F* P
4 B5 F: W+ f7 }/ r. y
list1 = [1, 2, 3]
2 f( f; r0 R& h/ v$ M( Alist2 = [4, 5, 6]
$ i0 l' }1 f+ l" K4 S1 T" [. d
; e+ A4 m# b* ]! F3 \$ P. n7 fprint(id(list1))& p. H( L; `- \4 @
list1.extend(list2)
# X2 f7 A4 y+ l; [# @5 vprint(id(list1))! ^8 y/ W8 p! u r
4 Z+ ~( X0 [- ]
输出:$ L. v( S' g$ k* [+ x1 K! q
4 r: M. a" P1 B8 e- O/ L6 ]5 X
1930566508928 Y% A$ i4 \, H# l: p- @2 Q
1930566508928
* }2 Q. r. j. }$ `; s4 V# C9 F% P4 f& U
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
8 h% f7 k1 |) {: ?( P, n0 B& S, o3 y1 R9 Y
list1 = [1, 2, 3]# A& R+ s6 [/ K
str1 = 'abc'
/ h2 D V8 K8 B3 y3 H* Q' E' y* o9 `8 t6 b T2 Y" o4 M7 o
list2 = list(str1)5 y$ }5 r7 V% _! l7 \8 Z' S. Y7 [
print(list2)" L5 J) H3 r: {
list1.extend(list2)
& n* g. I9 b( L6 _print(list1)
: @% x, W. G/ O/ n/ O+ G% \3 |7 B: J1 r1 Q5 ^
输出:
2 E6 E- V: ~/ t8 V/ C, U, ~0 s5 S7 ]8 T p
['a', 'b', 'c']
. ]3 p [ Q% }9 x' `[1, 2, 3, 'a', 'b', 'c']
0 {5 Z( F/ j* k0 I1 p2 g6 o9 ~7 o* B2 Q, K' ?6 f1 B9 ~
. Z/ z8 o+ ~5 H2 z4 [" F/ d% }5 `4 N, G3、extend() 和 append()、+ 的区别?
4 ^& \5 X! E3 K9 a以添加列表为例+ S& q/ \* T8 g9 G: V# S. m0 H( ]
/ k/ F9 k3 a) z4 K1 Z8 Lextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中# u( K) S7 L8 C7 _* c; \
3 g" v3 c0 i: l! V( elist1 = [1, 2, 3]+ S- ^' z4 R4 q% i2 G
list2 = [4, 5, 6]
% u) r W/ l0 B4 i
4 c' m3 O# C, @list1.extend(list2)! H* T! _, B1 U
print(list1)
1 m: J+ i# R$ a2 U% k* \9 Y3 B! n/ F) a
输出:$ ~0 s0 w0 Y% \! e
7 q" |/ ?; s% i% E+ o( e* Q7 y
[1, 2, 3, 4, 5, 6]
5 }" \3 v$ W' |5 F8 B4 @8 b0 E
3 x0 M R* ]2 b# H# r0 R+ mappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
1 O- ?# z$ @3 i3 N" A3 a' ~/ C3 G( C6 `+ i, W. U/ Y
list1 = [1, 2, 3]* o' D0 K2 B2 { d% T0 f
list2 = [4, 5, 6] e& H% L- ?0 z3 |& F- B- g
0 s% ~8 r+ w3 Z/ L1 w) v7 m
list1.append(list2)* m- i) t, G- W! [
print(list1)
) n, a& w, b( A& |
# S8 q+ l% H3 r) `' | f3 R, p输出:7 n! H. k" T- }( n" ]6 ^. Q
3 x/ J$ @( F* p- ?
[1, 2, 3, [4, 5, 6]]
& B( r* }" e4 }1 r4 @: \& a( ?, t
2 q7 g6 p9 |4 Z+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
/ F" F% X& h) ]% a2 M2 |5 H% y( N
list1 = [1, 2, 3]/ o! R* u7 k% d; V
list2 = [4, 5, 6]
+ {0 R x3 K# N8 h# {; P" F8 G& k4 P! N# L
print(id(list1))4 }9 T/ z7 [( T- f4 Y0 J
print(id(list2))9 y0 x# R5 i& Q, c
print(id(list1 + list2))# K. G: [# r0 F! R3 X O/ c% h& e
# ]$ o, c; Q! ^# `' y1 F; K+ M3 e
输出:
* P4 v$ Q" B' r5 [5 T5 w* v& h B2 E$ P
2680876376448& N8 O5 L$ e+ A
2680876376576! o; I# T7 e5 \% u$ T8 v, O2 B
2680878544128
V" {$ S9 o, i( \0 S: X. U7 ?( S2 R+ a7 D# a% [# F
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存" f. F/ `* K1 F
7 \+ p2 ~% `. ^5 g, m- v0 T' Ylist1 = [1, 2, 3]
2 n( D2 d! `* t- Ilist2 = [4, 5, 6]
" {' s0 {9 m6 p0 _! N, sprint(id(list1))
+ |0 {! @6 i, S6 `5 V/ w2 |list1 += list2
: @- Q0 i$ c$ B( {( U. P; Vprint(list1)
4 a" ^! k6 f5 F1 Xprint(id(list1))
# x/ A% I7 j/ _8 U5 A. U; i( }) r; ]. Y9 Y: \) f; W' _
输出:1 {* E- m8 r! D1 t6 G8 X. V
) i j3 O# y$ M6 A8 Z9 n! G( j
2150265921856
& A. W! K& \2 @4 t- J[1, 2, 3, 4, 5, 6]
4 A+ G7 m( a3 a; E3 _, l% P21502659218569 a; n/ k0 L* o
) r' L" g6 z$ ~# R4 G* `1 g) k4 y
4、特殊的添加方式
* `6 W- g$ ?; n+ n( ~配合算术「运算符」添加列表 \' B7 I6 c2 P! b
8 k, s$ v4 |8 N# v9 q
list1 = [1, 2, 3]
8 O y2 ?0 f' L( hlist2 = [4, 5, 6]! L! F; i: d$ L0 v c, [0 K/ }8 k2 w: j
2 b8 u3 d7 G2 j! W8 tlist1.extend(list2 * 2)
( a; m3 Y6 H3 Z: iprint(list1)
/ b" w$ j5 i6 ~% I0 U, a* ?list1.extend(list1 + list2)% M T) k2 f7 ^4 B W, J
print(list1)
* ?6 Z1 e* a, @% x6 d% ]$ L2 \9 D- p+ K, ?4 p
输出:. h0 Q9 V' `' {& Q' d
5 v; Y6 D( b$ x5 U# w[1, 2, 3, 4, 5, 6, 4, 5, 6]: j3 I' ^5 {" ^" Q ]6 y5 z- G
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
0 p% [2 B+ Y7 |1
; z: b: i, k! R3 V! B' k% U20 o$ |5 W' @. M! ^ |6 \1 O
「索引」取值添加列表
& l- P) y P9 F
[/ M$ }. R! e I8 Tlist1 = [1, 2, 3]3 X/ j" Q6 j# F: U
list2 = [4, 5, 6]1 n( v, u ~: f J- V! _! Q% y
\4 u3 Z9 k& X: Y( e- i
list1.extend(list2[1:2])
7 c n( ~6 o7 n/ T, }( `% G9 ^0 }print(list1)
! l. z; i* X* U' o' c; b2 y2 l |0 j5 K" `
输出:/ m4 Q! j. ^' j" n- b8 O
: |. l3 y& W0 {" `9 r[1, 2, 3, 5]/ [/ ?) E0 I8 n
5 X' v$ F4 D% n; ?, G4 ]' S! X$ Z
- `; |: i3 c" a# p' k; k
2 v1 c* B' Q B$ H |
zan
|