QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解
  \7 D' L2 h; H) E1、可以接收的参数
2 G6 H- [" v/ c3 I' [8 a1.1、添加字符串
" i* _# ]5 x2 n7 O5 [1.2、添加元组
0 H% s0 c' N& {, d+ ^4 y. u1.3、添加字典
  K* v7 _  ]+ L  U( Y- U# X- z2、原理解析6 A; n; e. X4 P5 J) w+ w0 Y
3、extend() 和 append()、+ 的区别?
% A* c: S+ P7 P4、特殊的添加方式; Q' O$ r$ x" N
extend() 可以在列表末尾「添加」另一个「序列」中的值。) Y3 b9 `3 k5 D6 s/ Y. H2 \

* X+ ^: }* Q4 \7 |+ z语法
6 h# E& Z" j5 n" M& E
' b$ T; x* j9 m% P7 X1 s) plist.extend( iterable )
8 ~, Z" w7 d9 p/ {3 G& q0 C8 C' `: `
参数
" m0 q7 B9 l. a6 p* \8 {! g( m# o" _( k' h2 k( Z- B
iterable :需要添加的元素列表; `0 h2 U! J( S% N
返回值
; t! V" r  b1 B( G& s
0 l/ v9 v& l  F% v8 X# s6 ^没有返回值,只是修改原来的列表5 ?6 p* x6 a8 X6 F
实例:向列表中添加另一个列表
; `& P' X/ b" v  v* ?; A
( y0 p' h0 Z' a4 I' ]3 Llist1 = [1, 2, 3]
) T, h# y  g' c! x! plist2 = [4, 5, 6]0 K5 V; }" r% ?! q+ v) @# G, ?

( a: Y* J# T5 k  zlist1.extend(list2)
9 P% S2 W# T* \3 }/ }print(list1)
* v) W* _4 Z; l% }8 X- D1 o8 R
7 w8 c, A# x% t" |3 g输出:7 z+ p' q7 o2 w# i: t

) H" a4 j+ b, |[1, 2, 3, 4, 5, 6]8 J. [, a- ]" r( p9 Y# L
3 V! E8 D4 w1 f
# i3 {$ F0 A/ y" B% ]
1、可以接收的参数9 b0 Z6 N6 }1 @
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。+ O$ ~# @, O3 M0 I

" @8 `( O5 q3 f0 a
, f7 x3 o# N/ V) ?1.1、添加字符串) i4 A7 l4 m5 `+ h5 Q* g
extend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。
9 ^' P. F5 J' q+ a" s& }- x' n9 G9 z) [, t2 U% h8 f$ `" R
list1 = [1, 2, 3]
/ b) k4 f: v, u4 \8 ostr1 = 'abc'
0 T. C. r, v7 J% m6 ]
5 G* B1 X, O" e  f! `, Olist1.extend(str1). T" [% i' K% i! `' |/ e. ~2 W
print(list1)" I$ A' \# O( h4 O
4 m2 I% f7 C& J+ F4 p7 E4 i
输出:+ {5 g- V, u* E8 N) u4 H& x7 S# G
* {- y! i- f  [+ I9 J1 O
[1, 2, 3, 'a', 'b', 'c']) v" |6 _3 G9 w2 C* N

) _% Z. u+ h( L
) h, B% x  A, r) q! x0 _$ I1.2、添加元组
" M0 l! G. p' f4 O% B) [! Eextend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。  ]: ]/ Y7 I1 }" J' u: C
6 K) W8 H4 Z1 S& @0 G, R
list1 = [1, 2, 3]
. q& h) l% w7 u4 j8 xtuple1 = (4, 5, 6)/ I( B, A0 O! [& a2 G+ N

+ I5 e# U% q( ^- y) Z7 @- o$ Nlist1.extend(tuple1)
0 N% |$ E% I1 k. l. hprint(list1)
( r; ^( J) K, k0 C7 ^# e
% k$ \$ R! O& B& @2 F输出:
6 b, k! {5 K! L/ B/ [" a* s; u/ Q! a3 o% u: W
[1, 2, 3, 4, 5, 6]( L1 u1 F% A. X% \2 p- j9 J
! U" \+ j% x2 {: k: Z
' A1 u) L4 n) Y, J
1.3、添加字典
* I7 u6 T: p: ~* iextend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
1 h3 V0 q& E9 l* @+ V
! p0 E" R" c( u( w* o8 Wlist1 = [1, 2, 3]" D/ Q/ l8 X3 c/ s; t6 L+ p  L
dict1 = {'key1': 1, 'key2': 2}2 ~- ]% }, L. j3 I6 }( G3 k

0 N, Z% A: \, M" Ilist1.extend(dict1)
, F" ]% g/ z8 O" D4 W! Xprint(list1). ]4 B- o& p6 y2 `- v' u# `

, i5 O0 Z" ]% X7 J输出:4 T5 t  A5 {' B" B4 U  H# \

3 J: }3 O+ v4 |& @[1, 2, 3, 'key1', 'key2']6 d3 C1 h: j) P$ w/ C! H) B8 F

! M* o* n" O- ^$ T. R
* N7 m2 S8 V; O  R1 U8 I/ d2、原理解析/ s6 `' w* k8 n/ v* i5 \3 O
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。
3 ]9 e) Y! T, o  |! q$ e7 a+ S3 n: w; D* j

5 t0 J1 D4 Z/ e# Q' q5 V: x. v8 I. c7 s, M# y, {6 f5 k( l
我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。
' d( D0 m. v' [( L$ g! A
# W' e) U  z2 {, ^$ z; \list1 = [1, 2, 3]1 a8 h. l1 Z! {  X
list2 = [4, 5, 6]
& M) [6 a$ G3 }% b& _. P7 |
# \4 _" o8 l; A; bprint(id(list1))+ S' S7 N+ b: M% o9 i5 l
list1.extend(list2)8 R3 g  x+ i: h- Y* k
print(id(list1))
; F& ]9 ?% Q* |$ r; D+ W( Z" [  k5 ?# }6 o8 ^! T( U$ z" B! J
输出:
# s% c1 J' n' f9 h" Q$ Y9 q2 ]) Q6 S; j' ^0 r: t' @# L& n$ l' @6 F6 ]
1930566508928, n$ E+ i' P4 }1 s
1930566508928  h7 O. p$ M. f2 l& B5 K5 c5 n7 ^* I

4 ^  h7 `& u) N$ K3 Z, Bextend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
  O0 _' J5 |0 d
" B( ]8 q( m& q- z, g9 F6 Dlist1 = [1, 2, 3]3 r8 I8 }, k7 V: @' j
str1 = 'abc'
. K- |9 V- B( W! r- Q# |/ @. A
$ l' D) W! S; w. V, |+ \7 \list2 = list(str1), d( R1 h0 n0 d1 u$ w
print(list2)- J& p% d& Q% C5 E
list1.extend(list2)  @% H' d% r8 J$ a
print(list1)" t* X4 `' T% T7 _% k" U# @& J9 f! ?
: W( o6 G( j" l6 i& F
输出:
, R* T6 A( _- e/ b* M  z- f; P7 Y; Y' e( o
['a', 'b', 'c']; o4 Q, P5 `2 X! w  q# n' P; K
[1, 2, 3, 'a', 'b', 'c']
1 d5 \! P# p9 `, m" Z7 X, i4 Z
' n4 S5 S. K8 s' Y+ I0 c
( E/ ^% E- }. t5 }" c  h" k3、extend() 和 append()、+ 的区别?
, l& `6 w7 A1 I* W. Z以添加列表为例
# N. W. D) g/ j* r* d8 F, X! z! y* Q6 t; _0 h# n7 d3 _7 W
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中
5 {2 R9 X* r8 Q/ d/ y' m
( i- a9 f# E! y3 alist1 = [1, 2, 3]
6 ~; B1 h/ J! _: d, U$ Nlist2 = [4, 5, 6]
/ J" @8 ?- }8 S2 F6 l- ]( P# m1 _( W( Z* U+ }
list1.extend(list2)$ t% ?9 d6 j0 Y1 `1 C, |0 I) u
print(list1)# E0 X* s- `2 Q# J

9 [5 I9 r/ g+ d# }; [% K, z. _8 E输出:
- Y3 Q3 ^$ f- i8 P7 E" |" k5 _. X3 D; K; ?, R
[1, 2, 3, 4, 5, 6]
! I) [0 J8 `2 j* }8 G: A* Y% c5 b7 F+ l5 ~- k) l
append() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
' v# ]" m6 y' e7 ]+ H( p7 J! t+ M! X0 X2 t
list1 = [1, 2, 3]
+ A4 U; W' y; h1 Y0 C' z  Elist2 = [4, 5, 6]* F" ^; o% B6 a; o# G7 a. g% y; z
- p* h; Q1 \/ y! e( \8 V; W+ X( n7 N
list1.append(list2)
2 ]0 C7 W( p3 W# m& qprint(list1)
# P# I' w  U  B/ J' U' f
  g# J4 l  G8 R' w' i输出:5 @# c; C. E  R# s8 o& y# W: V* Z
/ Z0 G! W: N- ?( o3 w7 s
[1, 2, 3, [4, 5, 6]]
; ~- L, p3 p1 g* I3 U1 D
/ A% ^. @9 {' S5 i+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变
( M. p- A! m" S$ Z- I
' ~2 W3 F+ ?; Y+ klist1 = [1, 2, 3]
: L2 s1 O- e# Z% @3 @7 T/ \list2 = [4, 5, 6]( k$ d) U# y( W1 g5 ]
+ n5 V5 \* [8 [! V( X
print(id(list1)). N2 U1 F0 C+ j9 r3 I+ h
print(id(list2))
; s2 v; `( A6 _7 [9 \  Qprint(id(list1 + list2))
9 |# F3 m# {0 G) c$ N! ~3 j; V% X3 U; r4 z( s' P9 q" O1 K
输出:
4 ^: _* }* l! l: b* l3 ^" {' z  c. {
2680876376448$ I# _* |8 [/ h" q# m
2680876376576
$ c7 e9 C9 X! f. n6 w8 b2680878544128
( M; g. S9 q+ g" v
4 A1 p7 R- j5 p: k+ j8 \4 I+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存
  D6 M, g1 O+ ]0 \6 \; v0 |% l% Z- x6 s" `# J
list1 = [1, 2, 3]
, K  q% e( K3 L1 k; jlist2 = [4, 5, 6]9 F  b; S" L; t/ {  Y+ U# X( j6 u
print(id(list1))$ p9 r- B% b: }( ^* g" D9 s. q
list1 += list2. B. Q) `& T* ]2 I0 _9 n4 I( S
print(list1)3 X3 C# S0 H4 L" {4 y+ H, i
print(id(list1))
4 }" t4 }, s) z% h( W2 a1 P) h0 A& c$ _* c7 p! h$ t
输出:
6 h; F' {$ K: M
# Z8 \& _: u  X+ U( n) v( o1 r21502659218560 X) R* {% m2 P" H% x
[1, 2, 3, 4, 5, 6]5 e; F0 S( Y. k- I4 B( `4 w
2150265921856
5 h/ m5 b2 e4 k! l" l8 B
8 E3 J8 e. R9 B# z; V" u7 T% A# P3 [- }2 H! E( C
4、特殊的添加方式
7 o, U' U& T. f0 I  u5 U配合算术「运算符」添加列表
- t2 D3 E" k+ q
& [8 v4 u+ @! ?: {2 Qlist1 = [1, 2, 3]
! W* E" M& X4 V1 Alist2 = [4, 5, 6]! I! e% x! }& R5 h

: _. o: {( ?- E; f: x9 d) Dlist1.extend(list2 * 2)
1 J0 ~" @2 W- G% h( |' |% Uprint(list1)
* {: G* @1 Z, K% D8 Z" R6 k6 ulist1.extend(list1 + list2)( h! a/ _- H% f
print(list1)& b8 z6 @2 G  n" N

6 P& I6 R/ A" W3 K' d输出:, Y& p) S: U- ~3 p; q: ~# H2 j
1 ]% k& B) m6 V1 [- F+ C' @" N
[1, 2, 3, 4, 5, 6, 4, 5, 6], H. r+ ~9 L8 S! D$ t' `# b7 \
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]! z% {. I6 ^6 P" K- _4 z0 w# F/ u7 N
1
/ W: |4 d5 |: k) U  T7 E; y! H21 J! F) ]2 \, y$ [* j$ v
「索引」取值添加列表
; R" `9 H. d; M: C" D8 t" ^& m: Z* n! J
5 v9 |, h8 }  _9 G3 ^. }list1 = [1, 2, 3]
6 u; c! D4 Q) C" r$ t3 Plist2 = [4, 5, 6]& ?- N8 ]" g1 |; i+ p

# D. t1 h5 Z8 ~) b& U# M, mlist1.extend(list2[1:2])+ ~& U  D* h2 k, ?' e% m
print(list1); Y; V. u1 J5 q+ ^% ]( m7 L
1 g, r! m) o  k) O9 I- o
输出:
& ~! q( w. a4 S! }& T, l; @
' l* H( `) E$ d[1, 2, 3, 5]) @" L) Q- H! I1 l4 ?8 y: K; ]

% u7 o6 h' h# p) s3 r/ l
# D- A6 O! x7 r/ B+ l0 F# x! O( X) j6 b# ~! K5 a+ L, K
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-2 20:44 , Processed in 0.598100 second(s), 51 queries .

回顶部