QQ登录

只需要一步,快速开始

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

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

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解
" H* n& R* G0 U% A9 R' y1、可以接收的参数
+ q' u0 m& J$ r9 N/ [* l' C1.1、添加字符串
6 Q/ `' A4 c- x! B1.2、添加元组% Z, ^& v5 ~' ^
1.3、添加字典
! f" S; W) {% L2 z1 e2、原理解析
8 _0 e* J3 s9 r. f4 `0 e% I3、extend() 和 append()、+ 的区别?% }6 p  w1 G7 s( l; v% a4 t1 w
4、特殊的添加方式/ p5 s( f0 ]) p: O# g& @
extend() 可以在列表末尾「添加」另一个「序列」中的值。9 ~/ o2 `! I5 i! x5 ^+ Q6 M
# T( |9 D8 n. i8 a" k; k
语法
4 g4 T8 P2 x9 K# k8 J7 `3 f5 x3 Z5 k2 E
list.extend( iterable )# U& u4 l! V/ R5 g. f
# O* V& e) {* h
参数
% c: _% A1 L5 \8 `' b! a" X. G3 x0 O3 _3 E+ }) O) X
iterable :需要添加的元素列表
. C5 o9 f/ t6 b返回值
# [" C4 {, g- J! t( O4 i! z
: T% P0 `+ l. p( k没有返回值,只是修改原来的列表4 I! F- {5 ?5 H3 Z5 ]. r
实例:向列表中添加另一个列表9 Y1 N; P" s0 a

( `; Y' p) ?; {4 _* wlist1 = [1, 2, 3]  o0 b4 s/ _0 E) k- |
list2 = [4, 5, 6]% W% ]5 {( e' x% y# \! i
/ H, h" p6 }1 E' j, y
list1.extend(list2)" f" U+ A6 R8 m
print(list1)
" A% h$ n( G# ~7 g
6 G5 V6 g5 Q& [输出:
! X0 {1 d3 ]$ X  t; I. E7 C1 z5 |8 d5 E/ o& ?0 Y/ k
[1, 2, 3, 4, 5, 6]# [3 r: h$ `$ T% S  K

- S% [( u9 Z4 H' w1 P& n3 Y$ n5 d/ E& [& T6 e
1、可以接收的参数$ d/ h1 N1 l/ W8 O, X" e, C& Z7 M
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。" f/ w0 x$ \8 ?' @/ t: B+ A; \

& b6 Z0 ?9 e! g( i( C! Q( i
: t) }0 p! D. d$ Y$ O1.1、添加字符串
2 `0 c: R3 k; l1 O9 k. hextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。7 {# P9 H# ]7 f  }, {: q
* [1 J, C5 K6 W: J
list1 = [1, 2, 3]$ v# p0 i8 V  r* _7 _
str1 = 'abc'$ t2 H+ F! S2 M/ u2 E5 {" g

' v/ ]$ d! G2 ~0 q" M+ I& ~+ o9 flist1.extend(str1)
' n+ h) A# V2 Pprint(list1)
& v4 s; I- u4 C1 `* h2 J  k9 h( k& v0 k8 m
输出:
2 O* B* C) b5 |5 D* o  y" j/ D, C# A! s2 l5 B0 _$ r! H
[1, 2, 3, 'a', 'b', 'c']$ N# l# d" \( }
; W7 G; ]8 K- u: U2 Y0 k3 M" O4 T

2 C* O. B& J4 P+ o1.2、添加元组8 n  C, l: c6 {  k. z
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
# Q3 _0 }+ l0 O" k
$ c5 e* E) I$ _7 i% g; ~8 N; q, D# elist1 = [1, 2, 3]
  ^2 F# M2 m3 Rtuple1 = (4, 5, 6)
9 S7 R1 Y( h1 g7 \' \, n5 M* I6 w
list1.extend(tuple1)
& B! M; Y1 X5 t; p, Zprint(list1)
- H* u( x4 l" m0 t# z- M) Y7 L0 e2 N
) I4 ~1 B) E- J3 z. `* w, L输出:! C8 D3 L' e% i  ]3 I
" V$ q- `6 @0 p8 A% h: T& M, g
[1, 2, 3, 4, 5, 6]6 i$ K8 Q. I0 y& O) L( J. c5 b- r
% \& A7 @2 p: }. `

. w2 w4 V% u9 k% A1.3、添加字典
0 ?: v# O! r) R! fextend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
0 s* A& w  F) [$ v  ]6 }5 G# w! p( K( ]/ A5 \# A7 J! v% O
list1 = [1, 2, 3]# P* D0 [8 f9 V8 p$ b+ f
dict1 = {'key1': 1, 'key2': 2}
1 s  S1 q+ o! ^0 x! G# Y+ ^3 C2 l! E( i
list1.extend(dict1)
, u8 P+ D3 q1 Q0 @' Rprint(list1)
5 x1 Z6 f  X' @
$ H5 ], U6 ?. x2 s( N, Z输出:
! G7 I2 w& r# y4 E0 U! u# p) U2 ~( M# F+ z% P4 @
[1, 2, 3, 'key1', 'key2']: \) C) w7 N$ r, q
; O) M! ^0 z+ M; S/ R9 s

% a$ {8 k6 Z" Y( k1 l' E2、原理解析
, c& T9 |) c0 x' j2 Qextend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。( q' M& }( L1 g$ ~8 S% Y
- }% T' S2 p3 L0 G
7 ~) Y0 ^  K% a* _6 `: i3 c

+ A/ a% D" P, o3 n* N8 ~1 `我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。7 H1 P9 @8 n- [( M

6 H1 i# n; T7 s  P1 n" \/ Wlist1 = [1, 2, 3]; o7 V+ Y- w6 ]
list2 = [4, 5, 6]
' B; ]" u# ^6 y3 w' r4 b! w, J% l6 J2 V( \0 B& ^/ U- H; T
print(id(list1))) }! Q# Y: N# p" ]; w
list1.extend(list2)* z0 ]: R  K6 ?* ^- ~" s! \, S
print(id(list1))
% t3 b5 {2 T/ Z5 e4 L2 h3 C8 e; g" D5 }! d7 r! I2 x
输出:. S; s/ L0 C+ r8 V  Z; u7 A1 q+ e4 Z
2 G) D' [, [% ~& F) H  F1 w. v
1930566508928& C! S/ w  R' t& v- Z
1930566508928
% J' S' A9 f6 k/ V$ s/ e0 ?% d9 o2 c. q* x+ }
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
; J* ]' H- ^9 v8 @" y$ @' W2 r6 |
* ?$ t4 T) x8 S" Z( o: F3 g; U1 Glist1 = [1, 2, 3]
8 T) \: d7 ?" i/ f3 j* Wstr1 = 'abc'
0 A: L( J8 {" ?# t$ h' u; |
9 H* n& F9 N6 {, g- Y# D: c( r' Hlist2 = list(str1)& @$ }, W4 ]: p0 Q6 ?8 q
print(list2)) |4 `, V* b( r. H
list1.extend(list2)
) A8 g/ T) y8 ?8 Wprint(list1)
/ l- j6 D1 ^$ B: ?! G1 H# U4 R
5 L2 E* P: A9 S- i( T0 H输出:
, l/ Q$ I3 ~" A
9 [5 V0 l. v, h; Q9 Y['a', 'b', 'c']
. E# [' d% I- \( G- r" L% j* Y7 `[1, 2, 3, 'a', 'b', 'c']
  \/ f+ b  H, N* E8 I( V
6 Q3 F$ s  }6 _- U% t5 r/ K
# B3 M2 q& K' M+ N4 \" Y* T4 l! L* k3、extend() 和 append()、+ 的区别?
9 I* [: E# l- a以添加列表为例7 _# R! j. ~! {4 c0 H

; v, {/ h& |4 x1 Nextend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中7 K$ R! j6 O  P+ ?( z9 C' A. y3 j
4 A8 n4 e( d1 ^$ b9 L, C
list1 = [1, 2, 3]
: k& d( u* G0 {2 m5 N: [* [& Slist2 = [4, 5, 6]: x3 }# v! n+ d' n) S7 f; [/ ~8 V" Q
* ^* h3 O% M9 d* V
list1.extend(list2)
9 m9 g9 J9 I6 S) U; Yprint(list1)  Y: S- `8 h' v: v

0 B4 D4 z- K& n: u1 ]' G输出:$ u/ O4 H' `6 L7 U$ s

' {/ W9 h% @2 |* H, ?2 l4 v[1, 2, 3, 4, 5, 6]
& r) ]& U+ Y, N5 {& C
7 e% m% z9 f1 [( T' m3 C) M" Pappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
: F( Q0 g. B5 |: X: x! J( r2 |) ^0 T: ?
list1 = [1, 2, 3]
3 Q3 f$ y# U! A7 Z+ }/ Z* X9 I" _% Klist2 = [4, 5, 6]
7 j* Y& V+ l1 p0 |5 Q2 z: \. y" p3 U8 J  |
list1.append(list2)6 g' w' i' a$ c2 S- l" }! l, I+ M
print(list1). v- b/ }" j3 M( V  y; i/ n
! x0 v8 B5 k' e5 D, P/ z& h
输出:( O; s' P# ?; O+ j
4 m8 Q9 @! }' K% q3 R
[1, 2, 3, [4, 5, 6]]4 W# O4 [" C7 i- n) \  e
+ q6 b6 x7 c' W6 K; Y1 N1 I' v
+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变  }" S( q2 R' N7 w% J

7 `& h- t  W0 Xlist1 = [1, 2, 3]9 c' X  y3 ~5 B; r
list2 = [4, 5, 6], Z' y6 U5 O3 X
6 o& x1 N- D! P( O
print(id(list1))
4 Z. E* Y! k. I0 T  D& @print(id(list2))* F# R, R5 m& }# \5 i, @# D8 ^
print(id(list1 + list2))
" g+ x( b# V+ H) R* W7 r/ k# z
9 G0 `8 |) i( a/ @' U; T输出:
  T0 X: q7 ]. x$ G1 u# a( n! J: x- e% e" L
2680876376448
( S7 k# n/ [+ D2680876376576( I1 t- \9 ?; B0 ?* a
2680878544128, h8 ?1 c) ?/ X0 Q- e7 x/ d, n
0 y( q- E7 ]: o  `. F# Q
+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
- r  N. L3 _" D* s9 S$ h1 R+ H" \
list1 = [1, 2, 3]
( ]8 a+ i+ {' N- V* j3 ~list2 = [4, 5, 6]& @$ U% g- e1 l* a4 @
print(id(list1))$ {2 U7 [" X( t) r9 v4 _
list1 += list2$ @: f: Q3 Z* g/ C* Y' I  V' S" l
print(list1). R  M7 a$ D8 U1 B# w# h: w
print(id(list1))# b4 \5 s( V0 `7 v- X$ |
8 [9 N# G. W: O$ L  `- h# G8 N
输出:
0 [& G5 p5 i3 K2 S7 _! ^. {6 T; ?8 o( L$ Z: x
2150265921856
3 a# A: U( y6 ]: ~' k) Z3 \[1, 2, 3, 4, 5, 6], C' G7 I$ V; ?% r8 Y' h
2150265921856
" R7 K7 R7 Y- I7 ]7 e- L1 y
% ^2 x& S4 N& P. {! W
2 ~: \" k2 z2 v, j4、特殊的添加方式6 w1 {/ Z2 |6 [8 z! g
配合算术「运算符」添加列表, P* x/ k# g9 A4 R/ N0 \' j
2 ?$ A$ i/ c, v" j/ K
list1 = [1, 2, 3]7 R$ Z+ H1 e9 x# D2 n' p- E
list2 = [4, 5, 6]
0 g$ r7 ?% t8 X5 w: I
1 O9 \8 U8 y# ~list1.extend(list2 * 2)9 W2 m; F: t7 y2 J. n$ r
print(list1)$ M* ~& L; h$ x0 n4 J& `
list1.extend(list1 + list2)
5 ?, ?+ X- c) g7 Zprint(list1)- I8 y' L& S. a$ b

8 r/ \7 v( N2 I' I输出:# O# F% U1 |+ E5 Q5 _& U- I, j

: o  A: w& x" W/ q2 s[1, 2, 3, 4, 5, 6, 4, 5, 6]: T0 v# M+ Z$ g8 g2 o; Z
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]0 }5 H! I2 Y* G/ N) R' t& H
1
$ }5 n0 f" @9 C# x# i3 l/ o) `7 F25 ~, h& K$ z. v% Q2 {* y0 b
「索引」取值添加列表. ]* p2 S1 @6 L' B+ {1 l3 K& O  M+ J

7 t6 M% M6 z  glist1 = [1, 2, 3]
! l' s- s+ k5 d- f& ylist2 = [4, 5, 6]
' l( [7 c7 a' U3 w$ p6 Z; ^. X5 x9 k
list1.extend(list2[1:2])
# ]! j) \; }. C  z- B9 A5 Cprint(list1)
  n. \) \- Z+ h' W6 C2 g! t' o+ P3 T& t- f: Y
输出:3 H$ y% _, h5 i- w" L

$ b* V+ w# Z7 `[1, 2, 3, 5]3 p. y" b" G1 F" J0 y
+ K6 x& }! r3 O
4 _; |) Z9 ~7 S7 T4 x' A
; ?8 p! ^& u, d' W
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-26 02:41 , Processed in 0.379075 second(s), 51 queries .

回顶部