1.Python range() 函数的用法?
4.3. range() 函数
如果你需要一个数字序列,内置函数 range() 会很方便,它生成一个等差级数链表:
>>> for i in range(5):
print(i)
range(10) 生成了一个包含 10 个值的链表,他用链表的索引值填充了这个长度为 10 的列表,所生成的链表中不包括范围中的结束值。也可以让 range() 操作从另一个数字开始,或者可以指定一个不同的步进值(甚至是负数,有时这也被称为 “步长”):
range(5, 10)
5 through 9
range(0, 10, 3)
0, 3, 6, 9
range(-10, -100, -30)
-10, -40, -70
需要迭代链表索引的话,如下所示结合使 用 range() 和 len()
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
print(i, a[i])
0 Mary
1 had
2 a
3 little
4 lamb
不过,这种场合可以方便地使用 enumerate(),请参见 循环技巧。
如果你只是打印一个序列的话会发生奇怪的事情:
>>> print(range(10))
range(0, 10)
在不同方面 range() 函数返回的对象表现为它是一个列表,但事实上它并不是。当你迭代它时,它是一个能够像期望的序列返回连续项的对象;但为了节省空间,它并不真正构造列表。
我们称此类对象是 可迭代的,即适合作为那些期望从某些东西中获得连续项直到结束的函数或结构的一个目标(参数)。我们已经见过的 for 语句就是这样一个迭代器。list() 函数是另外一个( 迭代器 ),它从可迭代(对象)中创建列表:
2.python不可变性和可变性的区别
Python中的元组是一种类似于列表的容器类型,但列表是可变的而元组不可变。
元组本身是不可变的,但是它所包含的元素的可变性取决于该元素的属性。如:t = (17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse']) 元组t中的元素数字17和字符串'Jesse'以及元组('LinuxKernel', 'Python')本身属于不可变元素,故其在元组中不可更新;但是其中包含的列表[17, 'Jesse']本身属于可变元素,故:>>> t = (17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])>>> t(17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])>>> t[0] = 18 Traceback (most recent call last):File "
列表的一些属性和方法:>>> dir(list) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 元组的一些属性和方法:>>> dir(tuple) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] 通过比较两者的属性和方法,可以验证上一结论。虽然列表与元组有些不同,但是它们还是有很多相似的地方:1. 创建方法类似:创建一个列表:l = [123, 'abc' , (1, 2, 3)] 创建一个元组:t = (123, 'abc', (1, 2, 3))2. 都支持下标操作:>>> l[1]'abc'>>> t[1]'abc'3. 都支持切片操作:>>> l[0:-1] [123, 'abc']>>> t[0:-1](123, 'abc')4. 支持重复操作:>>> l * 2 [123, 'abc', (1, 2, 3), 123, 'abc', (1, 2, 3)]>>> t * 2(123, 'abc', (1, 2, 3), 123, 'abc', (1, 2, 3))5. 支持连接操作(当然只能由同类型连接):>>> l + [3, 7, 6] [123, 'abc', (1, 2, 3), 3, 7, 6]>>> t + (3, 7, 6)(123, 'abc', (1, 2, 3), 3, 7, 6)6. 还有拷贝,比较,成员关系操作等等。
转载请注明出处编程代码网 » range()python