标签:转换 min() code ref print call traceback 连接 mic
目录
序列包括:字符串(普通字符串和 unicode 字符串)、列表和元组类型。
成员关系操作符用来判断一个元素是否属于一个序列的。
>>> s = "abcdefgh"
>>> s[::-2]
'hfdb'
>>> s[::-1] # 可以视作“翻转”操作
'hgfedcba'
>>> s[::2] # 隔一个取一个的操作
'aceg'
>>> s[-1] # 倒数第一个元素
'h'
>>> s[-len(s)] # 正数第一个元素
'a'
>>> ('day','month','year')[-100:100]
('day', 'month', 'year')
一个字符串,我们想通过一个循环,每次都把位于最后的一个字符砍掉。
>>> s = 'abcde'
>>> i = -1
>>> for i in range(-1,-len(s),-1):
... print s[:i]
...
abcd
abc
ab
a
上述方法,无法在第一次迭代时显示整个字符串,因为 -1 已经是“最小”的索引了,不可能用 0 作为索引值,因为这会到第一个元素之前而什么都不会显示。
>>> s[:0]
''
另一个技巧:用 None 作为索引值。
>>> s = 'abcdefgh'
>>> for i in [None] + range(-1,-len(s),-1):
... print s[:i]
...
abcde
abcd
abc
ab
a
看到这里,似乎还可以创建一个只包含 None 的列表,然后用 extend() 函数把 range() 的输出添加到这个列表里,然后对这个列表进行遍历。但是可变对象的内建函数 extend() 根本没有返回值,所以这个方法行不通:
>>> s = 'abcdefgh'
>>> for i in [None].extend(range(-1,-len(s),-1)):
... print s[:i]
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not iterable
这个错误发生的原因是[None].extend(...)函数返回 None,None 既不是序列类型也不是可迭代对象。
>>> type(range(10))
<type 'list'>
>>> type([None] + range(0,10,2))
<type 'list'>
>>> type([None].extend(range(0,10,2)))
<type 'NoneType'>
内建函数 list()、str()和 tuple()被用做在各种序列类型之间转换。但实际上并没有进行任何的转换。这些转换实际上是工厂函数,将对象作为参数,并将其内容(浅)拷贝到新生成的对象中。
a = [1,2,[3,4],5]
c = tuple(a)
print a,c
a[2][1] = 7
print a,c
a[0] = 8
print a,c
print id(a),id(c)
输出结果:
[1, 2, [3, 4], 5] (1, 2, [3, 4], 5)
[1, 2, [3, 7], 5] (1, 2, [3, 7], 5)
[8, 2, [3, 7], 5] (1, 2, [3, 7], 5)
139781837486560 139781837769024
b = (1,2,[3,4],5)
e = list(b)
print b,e
e[2][1] = 7
print b,e
e[0] = 8
print b,e
print id(b),id(e)
输出结果:
(1, 2, [3, 4], 5) [1, 2, [3, 4], 5]
(1, 2, [3, 7], 5) [1, 2, [3, 7], 5]
(1, 2, [3, 7], 5) [8, 2, [3, 7], 5]
139781837570480 139781837530608
因为一单一个 Python 的对象被建立,我们就不能更改其身份或类型了,所以不能简单的把一个对象转换成另一个对象。如果把一个列表对象传给list()函数,便会创建这个对象的一个浅拷贝,然后将其插入新的列表中。在做连接操作和重复操作时,也会这样处理。
浅拷贝就是只拷贝了对对象的索引,而不是重新建立了一个对象。
下图为序列类型可用的内建函数。len()、reversed()和 sum()函数只能接受序列类型对象作为参数,剩下的还可以接受可迭代对象作为参数。max()和min()函数也可以接受一个参数列表。
标签:转换 min() code ref print call traceback 连接 mic
原文地址:https://www.cnblogs.com/sxiszero/p/12459966.html