QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-22 11:52 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
extend函数使用详解
$ n3 p" Y" ]8 }1、可以接收的参数
( o( P0 Y& Z  z, T- V1.1、添加字符串
, d, Q; j! e. ~- P2 G1.2、添加元组
. w/ q# l5 ^- ~# k& c# ^: @5 ?1.3、添加字典
  I1 f1 a& Z; l. x) V1 a8 |1 w! Y2、原理解析2 q4 ?' C6 q2 o4 U" i' s
3、extend() 和 append()、+ 的区别?
  A2 J+ Y6 X- |+ ]( D/ A4、特殊的添加方式
' v( D" g. }3 G3 Z* ?extend() 可以在列表末尾「添加」另一个「序列」中的值。
& M: }# e1 P, G+ F( v( s) w4 A: ^) r, {' F3 ~
语法
4 s9 h* s, J# b( ~# O+ n. R: e) i3 O
list.extend( iterable )
: o9 ^+ b" {2 Z. b1 n6 l% B( z( n, ~- |; s/ |' d
参数: d$ g" O* H9 t4 y2 q1 m  X: E

( A4 H: C: ~2 C/ e, W3 Kiterable :需要添加的元素列表6 D' A  c  y" g( H& s
返回值/ @% K0 W2 \1 ^$ I9 i

* s+ m0 J" y% L$ p1 t' @+ {没有返回值,只是修改原来的列表* U& r+ k) Q+ B2 B" e' n  M
实例:向列表中添加另一个列表4 q$ i% x+ ^0 l) m3 y

, B; f7 x4 d/ u; c6 ?4 llist1 = [1, 2, 3]
3 T4 O* G% o) h; ~3 glist2 = [4, 5, 6]; ^% v, v- `1 r8 t8 o
; c7 P: W! o( G& H# C
list1.extend(list2)- y; y* f+ j8 l& X) x+ v. a
print(list1)7 }) T+ ]) `! Z  Q/ v2 k

5 ?" H! U: r$ c/ g, o- M7 [. E' o输出:
  M+ T! ?! j! U0 D8 f- w; X# D2 _! Q* S- H8 g: H/ M
[1, 2, 3, 4, 5, 6]
6 ~3 i8 A( o7 {' N" ]. s$ G+ j) g: K# Q( e$ B
0 {: @* C/ f9 ]/ j9 \' l7 ~, A
1、可以接收的参数, f( [1 p# @9 q) K: S6 |* a- p
extend() 接收的参数类型是「可迭代对象」,任何具有_iter_()或_getitem_()方法的对象都是可迭代对象,Python内了很多可迭代对象,常见的有 list,str,tuple,dict。
8 b- E' ]; w: L. ]+ R$ H8 V5 O4 @7 Q+ f6 y! ]+ V; v, y

! m8 }7 v$ I! B! S& _; R8 ~1.1、添加字符串
1 [) E2 e  \" dextend() 可以添加「字符串」类型的数据,字符串的每一个「字符」,都被当做一个新「元素」。" q$ ]* m# i. `+ p# {: ?
( U1 O# U& y5 g1 Z, _
list1 = [1, 2, 3]
* k3 B, d; H( Dstr1 = 'abc'
" c' H1 L& h3 H) M4 M" B2 m  k) B) x/ s
list1.extend(str1)' a, o- K" [& K' D/ e
print(list1). t7 k0 U- d: M) ]/ a
* @% |5 p, _5 g% y8 x$ ?, f' ^" v+ T
输出:0 h" I3 X4 w- V3 A5 W5 }6 W% }

8 x$ P) o. c% x/ |) M5 ^; \[1, 2, 3, 'a', 'b', 'c']
2 D% W6 h3 F- ?$ m" `- y( x1 p6 I' v1 g) o7 F5 d* c8 Q
9 w, R4 d. ]4 {/ N
1.2、添加元组8 }4 r& m, j% M/ Y& ?
extend() 可以添加「元组」类型的数据,和添加列表类似,每个「元素」都被当做一个新元素。
4 c+ C8 Q6 L! A9 v; v! A
* I, A3 ~6 U: D, N7 S6 I( R+ V, slist1 = [1, 2, 3]) k5 `! ?6 _0 v, N6 B
tuple1 = (4, 5, 6)) F7 a& S5 M  z5 T7 S/ h
2 w0 p; |$ t6 }, S' J2 L
list1.extend(tuple1)8 k. r0 |5 r9 {5 h3 d
print(list1)
; R9 a8 k6 n0 Z5 A# [
4 v/ q! M( ^0 B! ^& s输出:
5 P' q! V. S, I* b+ \! `8 U7 W3 }: u- [5 d4 Q
[1, 2, 3, 4, 5, 6]5 F9 {5 v7 n$ o' r  z

+ x% f2 z$ H4 X' D# G6 g
1 z! S( j2 S: \' H( |. K1.3、添加字典
/ K6 w" F4 T) R' |2 Jextend() 可以添加「字典」类型的数据,只添加键,每一个「键」都被当做一个新「元素」。
  h5 k! j6 H$ G" H0 g2 @0 P9 c$ L& c# T! F* K" F1 `
list1 = [1, 2, 3]
6 B8 ?; n# x1 |1 {5 J/ hdict1 = {'key1': 1, 'key2': 2}, x3 F/ h# ~$ V! A" J- a1 f

/ s& H2 G& R" x8 a' Clist1.extend(dict1)
$ Y9 G# v1 S/ O- d3 R2 m( rprint(list1)
- u7 R( }, Q, _, R& J: t' X! u; N+ A5 Z6 ]  {+ w- x+ Z0 Z, T0 f
输出:/ b' P. p% `% B+ }/ n9 I$ k

$ M* f1 s  K9 g6 x[1, 2, 3, 'key1', 'key2']. y( f  k# Q; Q6 c2 i! J1 b9 X$ k
. T4 E" G. V/ I$ o, X
: @! ^$ D0 F3 p5 X% R6 G
2、原理解析, |9 e. U7 |% g# [
extend() 只是将元素追加在列表「末尾」,本质上是 “修改” 而不是 “增加”,不会创建新的列表。. ^1 Y! p; S$ s$ r
) e2 S6 U: [) F) ]

! ]' f3 _$ p6 F5 x. n8 J- n
1 ?8 m" q  ^# x3 p* P8 U我们打印添加前、后的内存地址可以发现,「内存地址」没有变,还是原来的那个列表。0 J* I3 F0 r. E
! b( W  k1 r7 D6 ]; |# h
list1 = [1, 2, 3]$ N$ [* e1 V3 k: s+ }
list2 = [4, 5, 6]
$ i  h6 D4 u) w$ c9 @: }4 M& x% }* B/ f- u
print(id(list1))
6 U+ q8 r  m/ f' A1 Glist1.extend(list2)
! a8 g3 o2 g0 t0 v) J5 Lprint(id(list1))
- ^& l/ b. D8 R  k7 U
# X) P, V( n) P  |输出:
4 Y) `/ X+ `( I5 L$ N
6 u1 l, s2 t& k( K1930566508928
) ~5 X# q9 c9 a" W7 Z% Q1 P7 @  k1930566508928# ], a0 ^$ K  ?" _
) |! o+ {7 b5 i2 }6 y/ x
extend() 在添加其他类型时,会先转换成 list,再添加元素,类似下面这样:
0 M) @: m+ |2 Y6 r# p+ X9 v
% G8 q4 [. A9 @% ?0 t- r5 w* W9 Slist1 = [1, 2, 3]* Q) E4 Y' |- {" J
str1 = 'abc'" e9 o; F; F/ c6 E" g0 l7 z& Z
4 h; l  p+ X3 N
list2 = list(str1)
# D  o2 i: C$ ]( O/ W* I: l' G; m3 qprint(list2). d6 F+ A6 j3 v9 ~/ i* Q1 J' M
list1.extend(list2)
+ L! G! D$ _3 E8 m  Iprint(list1)
5 e. D1 D0 i4 n+ O% S0 g$ h! g5 m# d, k. \' f
输出:$ W) J0 ], H' p4 G, w& [4 f* ^

4 f1 j% t+ i0 I" K* Q5 y  }  _['a', 'b', 'c']
: G5 q5 n, o9 P" V% [[1, 2, 3, 'a', 'b', 'c']( \- m/ e: ~* \- W' A

; W5 _. \7 z+ F1 u; m/ S. e. v/ Y/ e6 @3 L2 m
3、extend() 和 append()、+ 的区别?1 M+ w5 ?' l& z+ d
以添加列表为例
2 q3 s. y" b# T- z, U( F% ^5 z/ [+ U5 D2 q5 h
extend() 添加列表,是将列表中的「每个元素」都当做一个新元素,添加到原来的列表中; t. f+ s$ ]8 h3 ?6 o
3 H0 O1 }, u$ E( b
list1 = [1, 2, 3]: T$ |  T' j3 I3 {; K) C
list2 = [4, 5, 6]
2 P/ C( n9 u- b, l# D/ O8 {) i( [/ h' I! A3 v
list1.extend(list2)
+ b7 K( c7 h3 D7 l% R% fprint(list1)' {3 r4 m) c7 b+ Y5 U  m

: b1 C% e/ c. [$ g1 e7 W输出:2 c) I: D+ m/ X/ P$ a
" g$ N1 \+ _4 L2 S! d7 G' i. h
[1, 2, 3, 4, 5, 6]
3 ?& B1 ]2 ^# h9 [% \! Z6 ~$ w2 ]9 l
+ P) B" d$ r, i: Qappend() 添加列表,是将「>整个列表」当做一个新元素,添加到原来的列表中
$ M5 Y8 s; l; M7 H6 h
! e" P: A( t: n/ S  vlist1 = [1, 2, 3]" P) U5 Z& X$ k% B- i- h
list2 = [4, 5, 6]; f% y* Z8 f$ ]; h4 k% \
  H3 e. ~- E' `: ]9 j$ i$ o
list1.append(list2)
3 P& K0 q/ l2 O9 }/ j6 B. Tprint(list1)
! ]* U4 \  h' N& U1 L
2 Z: H4 e/ r, A6 j0 Y' H! q输出:
. o5 v# ?8 }6 o1 e3 j$ S0 W- R+ O+ {
[1, 2, 3, [4, 5, 6]]
5 g1 K, m: t! F7 m3 G2 Q
4 w  r: G1 s9 ^5 c+ 会「拼接」元素,并创建一个新的列表存放,内存地址会改变- t! \; ]7 W, n9 u6 v
8 [  M( o3 v8 |! n; }  R
list1 = [1, 2, 3]8 Z  n! l+ l+ }: e9 _* C
list2 = [4, 5, 6]
! Z- u! O% X) X, P
- \3 N7 B, ?6 q# tprint(id(list1))9 N# \  N. J8 Y# Z; J
print(id(list2))
& @$ u5 g* u9 Z% I# ]print(id(list1 + list2))
  r* b" g" y' l/ F% N2 c) l# f6 C
输出:
7 ^& _/ A! ~- P: F1 J4 [; V
5 Y2 s8 R' u0 w+ a0 k/ Z4 O# \$ B  S) Z2680876376448
( c; W  x, _% @5 P0 u2680876376576
, T% C* F. _# e5 K, a2680878544128
& ]! u' z9 ~8 J9 X
% i9 t1 E5 |9 d- X' T, U0 C5 j+= 的效果跟 extend() 一样,每个元素都被当做一个新元素,并且不会改变内存; t! r! q% c3 u8 B. K$ A

( T( `$ U% {( y* I! Blist1 = [1, 2, 3]
8 R; Z/ K" i3 D7 Ilist2 = [4, 5, 6]* e0 s3 I* J5 B( V7 j
print(id(list1))4 u* ^/ z- b. w: w; b8 \5 t. ]
list1 += list2
  ~* p% W5 [* H3 j8 nprint(list1)
' o1 Z+ [4 ~3 _7 ^( X' Iprint(id(list1))/ p  T# N' v" G( U- E
$ ]9 K  D8 T" K% i+ H% j
输出:2 M2 C: s) B" y# _$ P7 _, }
" {& q7 `' p3 ^0 C
2150265921856+ D1 C( M; x/ D5 [+ G8 p
[1, 2, 3, 4, 5, 6]
$ B7 y8 R8 G; M  f+ f" k2150265921856* U' ^" V1 a( \3 I  o7 T6 S+ R* @
- o4 S) H9 I7 f8 K
: A" ?* d3 q* v* K5 w7 g' y
4、特殊的添加方式* B2 [' m6 j8 x7 ?3 W2 K
配合算术「运算符」添加列表
: z) _* o3 v& \2 f/ N- X: ]2 u: T& @
6 j7 z9 _' v# M8 Vlist1 = [1, 2, 3]
* m" }0 Q) d9 ~, {( ~list2 = [4, 5, 6]
  e# {9 l( X3 |) m% h
! A; `+ j- Q, ]list1.extend(list2 * 2)1 W0 r9 O% [" k
print(list1)
0 M& m. o7 V5 E3 a/ z9 Ilist1.extend(list1 + list2)
/ b) w, w7 C! P0 i# Zprint(list1): d6 K# G5 V$ S

- l0 k# W9 u+ k; a) i输出:$ ]7 i6 b) W( Y0 B/ @# B
5 b% a4 O. k# `
[1, 2, 3, 4, 5, 6, 4, 5, 6]9 d. d% i! D# E& y9 |3 g7 u/ n
[1, 2, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]8 R. |; O2 F: q- c
1
6 c) D/ r& c) K2
2 E  ^% c' e: g/ x9 z9 [8 Q「索引」取值添加列表
+ l1 C9 N7 j' R6 r8 M$ h6 z
- g9 b0 Y+ a- y' `$ x# Ylist1 = [1, 2, 3]
& S! x* `5 H* h7 Tlist2 = [4, 5, 6]
  Y9 D$ ?7 u; h4 f+ p( p* S" V% M* w3 @& f  Y0 \3 S4 H
list1.extend(list2[1:2])& x' Z( C* N, a+ \
print(list1)
8 a) c" k; b; e- c6 P! N8 W6 t7 X, i) A) X. w6 a% o* R0 b& w
输出:
0 L1 c; P3 ]: n$ B
- S! i: W" I. G4 X[1, 2, 3, 5]
  x& u5 b0 h, o  Q! Y- m( I/ ]0 ?9 c5 m0 C3 F5 Y

8 [" ^% h# k8 X; h/ b
: Q, Q8 u2 e$ V
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-4-12 09:08 , Processed in 0.419167 second(s), 50 queries .

回顶部