首页 > 编程 > Python > 正文

Python中的连接符(+、+=)示例详解

2020-02-23 04:14:55
字体:
来源:转载
供稿:网友

前言

本文通过在一段示例代码中发现的问题,来给大家详细介绍了Python中的连接符(+、+=),下面话不多说,来看详细的介绍吧。

假设有下面一段代码:

a = [1, 2, 3, 4]b = [5, 6, 7, 8, 9]c = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]for item in (a, b, c): item += [0] * (10 - len(item))print aprint bprint c

这段代码的意思是,有三个列表,需要在长度不为 10 的列表尾部填充 0,让其长度变为10。

输出如下:

[1, 2, 3, 4, 0, 0, 0, 0, 0, 0][5, 6, 7, 8, 9, 0, 0, 0, 0, 0][11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

这里没什么问题,一切正常。但是,现在变了需求,需要在长度不为 10 的列表的前面填充 0。

那么,我们尝试做如下的改动:

a = [1, 2, 3, 4]b = [5, 6, 7, 8, 9]c = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]for item in (a, b, c): item = [0] * (10 - len(item)) + itemprint aprint bprint c

直接来看一下输出:

[1, 2, 3, 4][5, 6, 7, 8, 9][11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

结果却不是我们想象的那样。如果你没有发现问题的所在,就继续往下看吧。当然,如果你已经看出了其中的端倪,那就不需要在这里浪费时间了。

按照我们固有的思维,上面的方法是可行,例如下面的实例:

>>> l = [1, 2, 3, 4, 5]>>> l = [0]*5 + l>>> l[0, 0, 0, 0, 0, 1, 2, 3, 4, 5]

这样的操作让列表如愿以偿的得到我们所期望的改变。

但是,如果我们在其中多加几个步骤呢:

>>> l = [1, 2, 3, 4, 5]>>> id(l)139935500860952>>> l = [0]*5 + l>>> l[0, 0, 0, 0, 0, 1, 2, 3, 4, 5]>>> id(l)139935500783272

到此,是不是已经看出问题所在了呢。通过 id() 方法的输出可以看到,后边的 “l” 已经不是前边的 “l” 了。

再看看下边的例子:

>>> l = [1, 2, 3, 4, 5]>>> id(l)139935500861024>>> l += [0]*5>>> l[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]>>> id(l)139935500861024

当用 += 时, “l” 前后是一个。此时,我们应该明白一个事实,文章开头的例子并非莫名其妙,而是有原因的。

别着急,我们再来看看例子:

>>> t = (1, 2, 3, 4, 5)>>> id(t)139935501840656>>> t += (0,)*5>>> t(1, 2, 3, 4, 5, 0, 0, 0, 0, 0)>>> id(t)139935502151336

可以看到,当我们把列表换成元组时,结果又发生了变化。

那么我们对元组使用 + 操作呢:

>>> t = (1, 2, 3, 4, 5)>>> id(t)139935501081200>>> t = (0,)*5 + t>>> t(0, 0, 0, 0, 0, 1, 2, 3, 4, 5)>>> id(t)139935502151336            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表