append
list_obj.append("one_more_datum")
extend
list_obj += ["one_more_datum"]
请问你们平时用哪个?
1
TuringGunner 2018-04-13 09:32:51 +08:00 via iPhone
什么?单个元素还有人写第二种?
|
2
justou 2018-04-13 09:34:34 +08:00 1
少打字≠可读性好
|
3
huhujin 2018-04-13 09:40:32 +08:00
主要看代码逻辑,两个都可以.此外 += 调用__iadd__ 方法,后面只要是可迭代对象就好
|
4
crb912 2018-04-13 09:40:56 +08:00 via Android
难了。楼主你连 extend 和+连接符没区分开。加号连接符是加号连接符,extend 是列表的方法。这是两个不同的东西。
append 只能追加单个元素, extend 会在原先的列表 A 尾部扩展新的列表 B 的全部元素上去。这个时候,A 被更新了。 +连接符只是连接操作,不会修改,等价于得到一个副本。 |
5
crb912 2018-04-13 09:45:31 +08:00 via Android
你的第二行代码就不是 extend 方法。你用加号连接符生成了副本,然后赋值给了 list_obj。。。。这个对内存的的开销更大。一种不优雅的方式。
A.extend[B] 休息 B 必须是列表对象,而非元素 |
6
gonethen 2018-04-13 09:46:40 +08:00 1
我主观上觉得 append 可读性好
|
7
julyclyde 2018-04-13 10:14:20 +08:00
从语义上讲,你添加的是元素,而不是另一个 list
|
8
noNOno 2018-04-13 10:17:54 +08:00
虽然不想挑毛病,但是+=的可读性就很不好
|
9
goodryb 2018-04-13 10:28:28 +08:00
标题与内容不符?
明明说的的 append 和 extend,结果举得例子是 append 和+ append 是添加单个元素 extend 是追加一个列表 分不清"one_more_datum" 和 ["one_more_datum"]的区别吗? 如果是"one_more_datum" 和 ["one_more_datum","another_more_datum"] 就不会犹豫说用哪种方法了吧 |
10
Sylv 2018-04-13 10:28:42 +08:00 via iPhone
显然 append 比 += 更直观,append 一看就知道是在末尾附加的操作,+= 还要想一下。
|
11
deepjia 2018-04-13 11:38:57 +08:00
这不是 extend
|
12
lrxiao 2018-04-13 12:08:19 +08:00 1
我就吐槽下标题
perferabley => preferably |
13
ericls 2018-04-13 12:13:37 +08:00 via iPhone
第二个不是 extend 第二个甚至会有复制
|
14
ericls 2018-04-13 12:14:12 +08:00 via iPhone
^^ * extend 甚至有复制
|
15
laoyur 2018-04-13 12:17:04 +08:00 1
哈哈,总结下槽点:
1. perferabley => preferably 2. 标题说的是 append 和 extend,然后正文用的是 append 和+,显然楼主误解了 extend 和+的关系 3. 楼主对 append 和 extend (其实这里是+)的可读性比较似乎有什么误解 4. 楼主怼「可读性」和「少打字」之间的理解似乎有什么误解 |
16
xpresslink 2018-04-13 13:26:41 +08:00
|
17
northisland OP |
18
ironx 2018-04-13 13:50:48 +08:00 via Android
这是两个不同的方法。一个是添加单个元素 1,返回原先列表的引用。一个是连接两个列表,返回新列表的引用。
|
19
myyou 2018-04-13 13:58:43 +08:00
@xpresslink extend 是迭代 append,+是两个对象相加生成新对象
|
20
chenstack 2018-04-13 14:20:56 +08:00 2
@myyou @crb912
本来是讨论 append 和 extend,结果有些人讨论的是+=操作符是不是 extend 了。 += 会优先看有没有__iadd__方法,对于 list,是有的。在这个情况下 a += b 和 a = a + b 不是等价的。如 xpresslink 所说, list 的+=和 extend 几乎是等价的,如果还纠结+操作符,不如做个试验 a = [1, 2] print(id(a)) a += [3] print(id(a)) a = a + [4] print(id(a)) 对于楼主的问题,如果只有一个元素添加,我选 appand,语义上更符合,而且没有创建 list 的开销 |
21
wizardforcel 2018-04-13 20:08:04 +08:00 via Android
@crb912 += 不会修改???你说啥??再说一遍??
|
22
crb912 2018-04-13 21:16:47 +08:00 via Android
@chenstack 看来我完全不知道 a += b 和 a = a + b 在 list 的区别。多谢指点
|