QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2813|回复: 0
打印 上一主题 下一主题

Python 列表 extend()函数使用详解

[复制链接]
字体大小: 正常 放大

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解9 m+ U4 ?/ J1 [* L& S
1、可以接收的参数
0 V) m3 Z- v2 X7 M/ y2 e1.1、添加字符串
2 |8 r- h, @0 B% U1.2、添加元组+ B2 k0 n! V6 A2 R- x; Q
1.3、添加字典
& S3 [  b- E6 P8 j% |2、原理解析# w8 \& S% O+ d1 S( V2 h+ U3 l' s
3、extend() 和 append()、+ 的区别?4 b1 w' s7 m  l+ \% i/ F7 a* Y
4、特殊的添加方式! i3 {4 G5 v5 X  {/ ?, f5 p+ V1 _
extend() 可以在列表末尾「添加」另一个「序列」中的值。* j/ Q9 B+ k! R  n7 x5 T. }

; F9 h8 G6 Z# ?$ P语法/ d% |/ J* X0 T8 {  y& J9 M
9 r6 ?0 d7 @" I' O& c. w; I( \2 c
list.extend( iterable )
/ f3 b0 D( m6 O1 f
1 J+ u3 M# h7 G+ e9 g& O7 }参数
. H  a) ]) z+ j. N; b/ K$ z2 t- ^9 B0 r. ~
iterable :需要添加的元素列表9 i- t) S7 R* R
返回值
9 R, K. G5 A! l' y" C- `# s6 O. d3 ]) @  j: t0 |$ E4 b
没有返回值,只是修改原来的列表
; A3 w) v! k$ E实例:向列表中添加另一个列表2 D2 n3 I" Y& G2 l9 T1 l
# S8 h( l* D: s1 x. a
list1 = [1, 2, 3]
1 U% ?4 z/ z% [list2 = [4, 5, 6]6 d% q0 F# d) a

( B! m% T; g. I; U# slist1.extend(list2)0 v& J( |4 q, ?2 Q
print(list1)
/ V: u. Z" c3 B% \' z9 I4 W! P* Z& j9 [: z
输出:
/ n: i- r, U. b$ J1 E% C8 _3 j( n* p4 c
[1, 2, 3, 4, 5, 6]9 z3 o% F- u/ k; R5 S# N% K1 Z

1 f/ Q' }# O% T( O4 X2 f$ {
6 X0 g# T$ E& W# F3 c6 x& l( W1、可以接收的参数
, E! O0 ?9 q% I5 F0 }extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。) O! e/ ?" F2 Y7 f6 Z6 F6 k6 B
1 N# Z5 b9 @, n1 A5 A

7 ?6 W* g- y% \  F4 ]7 B$ S, _0 ^1.1、添加字符串/ y3 w9 }  S& n. w, I
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
) ^0 s1 _# V3 a" j
' a" E- I) @  N4 Mlist1 = [1, 2, 3]
+ o( S; Q  D/ O" lstr1 = 'abc') W' w7 X" X) }7 B
; N8 @8 @/ T& n) ^+ Z5 \
list1.extend(str1)$ f. d% H% ?. _9 |4 C" E! D
print(list1)9 f  w/ w( \, P5 E1 b+ M
: w+ g# G! f3 m" r
输出:
$ I( S# _5 T7 ~5 ^" d
+ F& e7 n3 r* Q[1, 2, 3, 'a', 'b', 'c'], _4 d* V- @! z
+ g/ k- H( ^- q
9 J/ N' G( `) o' z2 U5 K
1.2、添加元组
/ Y% z7 B0 B' ^2 [( hextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
5 d& Z, v2 s0 _3 o2 z% B8 T5 B1 L$ w' J1 b# t3 w( y1 b* j% `3 _
list1 = [1, 2, 3]
8 o& F' j2 e; x$ H9 N. @% rtuple1 = (4, 5, 6); S1 a- ^- z$ z, L( E7 r0 ?+ P! i
& s$ n" L8 h/ p. R) [
list1.extend(tuple1)
/ v1 |( A% p" h0 Iprint(list1)4 A# I; ]) K9 |+ _- z7 L& U

) ^; b* X; ^. u1 T+ q输出:
) S1 N! l% ^8 x+ _/ J% S' ]$ S, s, N5 [7 M" b. D! C
[1, 2, 3, 4, 5, 6]
4 e& s+ K% F! N  }8 p0 h1 K
! A! C7 V/ W. v! u( p1 N( z$ u7 q) U+ u" V4 \
1.3、添加字典6 m! U/ w9 R; c; g5 ], Z. j
extend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
6 P1 a1 U- c5 G1 X, ?" \) D* e( P4 `4 N
list1 = [1, 2, 3]  F# `  `4 G, v2 D/ G
dict1 = {'key1': 1, 'key2': 2}/ T4 T6 z) c# u: _8 v! V" E

6 l/ n' z; j; l. a; G, I. P: z3 Glist1.extend(dict1)# m! L" ^! L! ]3 c7 G
print(list1)6 g6 H& E& V  n8 C& ~

/ U/ m0 P$ M6 l输出:  Z- A! u+ y/ Z2 D+ L  y

* I$ }' r* F0 P% p& b2 |[1, 2, 3, 'key1', 'key2']$ U6 w9 f- z5 U

- y2 s. T( h/ x( O4 ^0 h4 V  l) H* T9 h! F
2、原理解析, Y; n3 d2 h8 z. z
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
* N  X" _1 v8 W/ u  Y3 L, w$ A
2 |6 `6 G) C+ a1 X4 }% \8 v% r
* ~$ E6 k& ?" _% {; V  w+ D2 F! M" a) r  p3 i
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
0 B# b/ X: q! n4 `0 ?. k' b6 F. @( [5 g" z; X# |
list1 = [1, 2, 3]' f* I5 y- E& G
list2 = [4, 5, 6]/ U& ^  R- G, V4 ^6 E) ~# M

2 P" E+ t' p6 \' `print(id(list1))1 ?* c8 {# X# v+ [8 a
list1.extend(list2)& J' R( @! ?: z0 `' s0 H: f
print(id(list1))7 g# y  P( U2 y

3 G8 q, i+ W! e1 |1 }输出:
# V: ]" }: n- v+ U4 g1 ~. s" h# [
, e7 J  h1 }! q1 U& l5 Z/ O1930566508928' O$ Y5 J) {; a# k# I: z
1930566508928  k" D, m) }0 ]4 m6 M

4 C  a- k1 O+ z, Z+ aextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:! {* {, @9 v) s2 J
, @: Q; w8 s" `2 K! p! _- Z  u$ v+ y
list1 = [1, 2, 3]! [+ P' _: K1 p
str1 = 'abc'
& K7 P: U8 L  D' ?! k  B) D) D6 D
& ]# N3 [) k5 q/ Ulist2 = list(str1)4 f1 Q9 R+ H6 o4 D# f8 ~
print(list2)# C0 ?4 p( A, a5 G7 Z; S
list1.extend(list2)
6 i; {9 C& b5 `6 _print(list1)  T5 X3 G: |3 h  A( D3 U; G$ |- h3 [& e

; [0 d2 B1 F7 O+ W5 K输出:
1 ~7 i/ B" R0 s3 Z( _  p3 z1 H0 F5 i' S4 [1 t9 G/ D/ w4 A/ q! @
['a', 'b', 'c']
& |( U5 G4 S0 ?3 O4 x- m, B% ?[1, 2, 3, 'a', 'b', 'c']  @1 _. i7 c  D! P/ j5 \! P

3 C4 v+ |4 q  m! Z7 P' s
* O6 @, K6 U( s3、extend() 和 append()、+ 的区别?* A6 W) d  `! e; d  B  E
以添加列表为例3 d7 [/ L3 m: v" }: @6 X

4 F" g( K3 p" p( m& M" Kextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
# g2 _3 E* p" L' b5 B
2 ?; Y( C9 R. W1 P9 [' W* w) x! Llist1 = [1, 2, 3]. G: V& Q( \* H; x5 B
list2 = [4, 5, 6]1 h) y. \3 L+ h- x) }+ m

/ D# w. v5 f( r9 @; x2 d# Flist1.extend(list2)& z) \4 P* N1 I0 j* P  X9 C: ^5 j( M
print(list1)6 ?; {4 n5 G- v. `) m* C

' r3 r' H& K! S+ z2 r3 G' U6 C2 n( u输出:
$ {; e" B( W0 ~, }, K3 \! |! k/ H6 a: t8 R
[1, 2, 3, 4, 5, 6]4 z6 l( G* J: w% j
- {# x2 x9 A" ]/ I" O) a
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
6 Q' C; Y" x1 y' n$ u: l6 c* x+ Y  \: N" N% l) B- Z0 w# B8 t- f
list1 = [1, 2, 3]
4 I7 P$ e8 L$ `" Y; ~7 w( v8 Vlist2 = [4, 5, 6]7 A0 a1 Q  M# o$ E

0 Y3 O# a. i' ?6 @2 y& clist1.append(list2)
+ f, @( s" {; {, }) Y: tprint(list1)
4 W2 ~9 b' w4 ?' x# q$ I7 @: d
/ i* Q/ j8 |4 y$ g' N' P. f6 c, k输出:9 @6 `* f" Q! s1 f7 s3 O# Z" Z9 P

; p$ P; z0 N/ M% ?/ ~# p+ Z7 p[1, 2, 3, [4, 5, 6]]
% N$ c( B1 u: J( Q6 s
* Z0 T2 n1 [) I+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
+ G# [6 O. I$ Z3 f& x3 w
3 ~1 L3 E% k9 N. glist1 = [1, 2, 3]- F* L' n7 f0 E
list2 = [4, 5, 6]+ \  V2 \/ A6 `) r' C; T& t7 V

4 n( {  d& ]" Z$ v& p' Zprint(id(list1))' i/ A! F4 d8 F! W$ I' G
print(id(list2))5 Y' `! N4 I3 F  G& C, g
print(id(list1 + list2))
# f( |/ H# b) @4 A
) D5 D" V6 y# c! D$ _0 {$ q输出:
% B5 S& F, b, T0 J: s6 O1 i3 `7 i4 s3 U5 I. d* o5 A* {
2680876376448, T- ]2 Q# X, P- n2 \5 }, V
2680876376576
  l; H7 t3 Q9 ~; |3 t4 P26808785441287 p7 v8 t' X/ F
/ N- Q# c9 ?1 o& o3 S# u
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存  w7 y, Z, P+ _3 }
9 J: A' _* _& G8 M
list1 = [1, 2, 3]
1 u6 g: z- S3 l. d2 C% T% zlist2 = [4, 5, 6]
' |4 _! L4 \6 s' q5 U# z8 Gprint(id(list1))
. Q7 ?9 d8 w! |9 L8 [- ylist1 += list2" h& j4 O0 H; ~" \5 q
print(list1)0 A, H$ t' ?$ L0 O% Y
print(id(list1))
8 U' p" t& S3 W( @6 O: H: X9 W
+ J2 k/ d6 I) m# n输出:
( X+ l; t  E1 F9 z( V2 [
4 Z/ |* Z& K- a1 R, V2150265921856: D+ u+ \+ r2 ^2 U6 X$ ~
[1, 2, 3, 4, 5, 6]9 q3 M! |) i2 o( N- ?9 O
2150265921856
0 Y" C' R" w" b2 y0 e( m: u( U4 ], {& Q! ]3 K

6 O+ ~1 j. w$ C0 f$ U" K/ _4、特殊的添加方式! C9 g6 R) \" w7 z8 x
配合算术「运算符」添加列表  R! m1 S0 M1 [6 c; h: Y; Y: ^
$ e7 Y7 K' S% W9 D( k  f
list1 = [1, 2, 3]
- Z8 T$ D! |1 ~) B  e! p$ Z8 ?# Slist2 = [4, 5, 6]
& U7 y4 x% Q& ]3 B, b6 {' c
, K, R* c* A: w2 Olist1.extend(list2 * 2)9 s* m. a, |. O
print(list1)5 C& r. k6 i* \" Y
list1.extend(list1 + list2)( i7 n& x% W0 x0 F4 k! A
print(list1)( m' W$ }! c2 w' v' f) c, I' S
: B9 g) S; g5 e0 |/ y& ?
输出:
$ c  W! t( Y4 [
: u. F0 Y* _0 E: j[1, 2, 3, 4, 5, 6, 4, 5, 6]
$ M# l2 @9 m; z4 W* l9 d( e  J# e[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]
9 o& Q1 J. I6 J' k5 O15 y" V, m: T, L! V( R
2; z; j- V  X+ |" e+ F8 l& b
「索引」取值添加列表2 S2 ^! d5 c4 s$ {2 c" `% _

7 F' w% P  t1 ]: l! L6 X! A0 vlist1 = [1, 2, 3]& @5 E: y' Q: G
list2 = [4, 5, 6]; D" v% K7 e6 F: b+ h3 ]; |/ s; f9 [

, Q; Y! n" T& A6 @% elist1.extend(list2[1:2]): v0 \7 z5 q& p- u2 m
print(list1)4 r( G+ S7 l  V. P6 W4 w

) ^  n2 I8 O4 ], j# E  F  o输出:5 W7 W8 V8 O/ B! y; p' ?

7 i0 v$ e5 _1 B% X( ^[1, 2, 3, 5]
$ G* k1 R$ J/ {' h- T2 R" G5 W" \& u, p
! C5 p) m$ M) ^4 u! U
$ Q) F7 Q* |4 ?7 M% z1 `
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-25 22:00 , Processed in 0.332320 second(s), 51 queries .

回顶部