2007-08-27
Python Cookbook 4.4 在序列中遍历它的元素和索引
需求:
你需要遍历一个序列,同时,你也要知道当前的元素的索引号.(你也许要改变它们的顺序),而Python使用的遍历方式不依赖于索引号.
讨论:
使用Python的enumerate可以解决这个问题,比如:
for index in range(len(sequence)):
if sequence[index] > 23:
sequence[index] = transform(sequence[index])
遍历序列是很常见的需求,Python也加强了这方面的处理,你可以很方便的处理这样的需求.换句话说,最Python的使用方法是:
for item in sequence:
process(item)
而不是和一些低级语言一样,需要按照元素的索引号来访问数据.
for index in range(len(sequence)):
process(sequence[index])
直接遍历更清晰,简洁,快速和通用(你可以遍历任何序列,而使用索引只能遍历列表)
然而,有些情况下,你需要知道索引值,最常见的用法就是重新为序列元素绑定值.为了满足这个需求,Python提供了内建函数enumerate,这个函数可以接收任何可迭代对象为参数,并返回一个值对(index,item),可以使用下面的for循环来完成:
for index, item in enumerate(sequence):
这样能同时得到索引值和元素.
对于列表L,可以使用d=dict(enumerate),这样返回了一个和L等价的字典.其中d[i] is L[i]
相关说明:
class enumerate(object)
| enumerate(iterable) -> iterator for index, value of iterable
|
| Return an enumerate object. iterable must be an other object that supports
| iteration. The enumerate object yields pairs containing a count (from
| zero) and a value yielded by the iterable argument. enumerate is useful
| for obtaining an indexed list: (0, seq[0]), (1, seq[1]), (2, seq[2]), ...
|
| Methods defined here:
|
| __getattribute__(...)
| x.__getattribute__('name') <==> x.name
|
| __iter__(...)
| x.__iter__() <==> iter(x)
|
| next(...)
| x.next() -> the next value, or raise StopIteration
你需要遍历一个序列,同时,你也要知道当前的元素的索引号.(你也许要改变它们的顺序),而Python使用的遍历方式不依赖于索引号.
讨论:
使用Python的enumerate可以解决这个问题,比如:
for index, item in enumerate(sequence):这比使用索引来访问序列更清晰,可读和快速:
if item > 23:
sequence[index] = transform(item)
for index in range(len(sequence)):
if sequence[index] > 23:
sequence[index] = transform(sequence[index])
遍历序列是很常见的需求,Python也加强了这方面的处理,你可以很方便的处理这样的需求.换句话说,最Python的使用方法是:
for item in sequence:
process(item)
而不是和一些低级语言一样,需要按照元素的索引号来访问数据.
for index in range(len(sequence)):
process(sequence[index])
直接遍历更清晰,简洁,快速和通用(你可以遍历任何序列,而使用索引只能遍历列表)
然而,有些情况下,你需要知道索引值,最常见的用法就是重新为序列元素绑定值.为了满足这个需求,Python提供了内建函数enumerate,这个函数可以接收任何可迭代对象为参数,并返回一个值对(index,item),可以使用下面的for循环来完成:
for index, item in enumerate(sequence):
这样能同时得到索引值和元素.
对于列表L,可以使用d=dict(enumerate),这样返回了一个和L等价的字典.其中d[i] is L[i]
相关说明:
class enumerate(object)
| enumerate(iterable) -> iterator for index, value of iterable
|
| Return an enumerate object. iterable must be an other object that supports
| iteration. The enumerate object yields pairs containing a count (from
| zero) and a value yielded by the iterable argument. enumerate is useful
| for obtaining an indexed list: (0, seq[0]), (1, seq[1]), (2, seq[2]), ...
|
| Methods defined here:
|
| __getattribute__(...)
| x.__getattribute__('name') <==> x.name
|
| __iter__(...)
| x.__iter__() <==> iter(x)
|
| next(...)
| x.next() -> the next value, or raise StopIteration
标签: Python