守望的麦子

关于 for 循环

2017-11-27    东京 /python/2017/11/27/for.html python

Python 是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性。
Python 编程简明教程 https://wheat.at/python

Python 中的 for 循环接受可迭代对象作为其参数,每次迭代其中的一个元素。例如:

>>> fruits = ['apple', 'banana', 'pear', 'orange']
>>> for i in fruits:
	print i

	
apple
banana
pear
orange
>>> 

print 语句默认会为每一行添加一个换行符,只要我们在 print 语句最后添加一个 , 就会取消换行符:

>>> for i in fruits:
	print i,

	
apple banana pear orange
>>> 

print 为我们的每一个元素添加了一个空格,这样看起来更加清晰美观。如果要最大程度的控制输出布局,我们可以变量传递的方法,将数据放在一处,借助于格式化操作符号 %,然后将数据封装在元组或者字典中并放在 % 的右侧。例如:

>>> print "Do you want %s %s" % ("an apple?", "Bob.")
Do you want an apple? Bob.

我们还可以使用 for 来生成一个数字序列,例如:

>>> for i in [1, 2, 3]:
	print i

	
1
2
3
>>> 

但如果我们需要一个 1-100 的数字序列,通过上面的方法显然不可行。这时候我们可以借助于 Python 的内置函数 range()。例如:

>>> range(3)
[0, 1, 2]

等等,怎么是从 0 开始?查看一下 range 的帮助文档:

>>> help(range)
Help on built-in function range in module __builtin__:

range(...)
    range(stop) -> list of integers
    range(start, stop[, step]) -> list of integers
    
    Return a list containing an arithmetic progression of integers.
    range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
    When step is given, it specifies the increment (or decrement).
    For example, range(4) returns [0, 1, 2, 3].  The end point is omitted!
    These are exactly the valid indices for a list of 4 elements.

>>> 

原来 range(3) 中的 3 表示在遇到 3 时停止。而假如我们需要 1-10 的话,应该需要这样写 range(1, 11),测试一下:

>>> range(1,11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

所以 1-100 的正确写法应该是 range(1, 101)

for 循环不仅可以迭代元组类,对字符串也是可用的:

>>> for i in 'abcdefg':
	print i

	
a
b
c
d
e
f
g
>>> 

Python 中获取字符串长度的函数是 len(),例如对 abcdefg 取得字符串长度的写法是:

>>> len('abcdefg')
7
>>>

当然实际应用时,我们的字符串通常会是赋予一个变量名的:

>>> text = 'abcdefghijklmn'
>>> len(text)
14
>>>

那如果我们要取得一个字符串的索引值和其元素的对应关系,我们可以怎么写呢?

就可以使用 for 循环结合 range()len() 函数了,例如可以这样写:

>>> for i in range(len(text)):
	print i, text[i]

	
0 a
1 b
2 c
3 d
4 e
5 f
6 g
7 h
8 i
9 j
10 k
11 l
12 m
13 n
>>> 

美观一些,可以这样:

>>> for i in range(len(text)):
	print '(%d)' % i, text[i]

	
(0) a
(1) b
(2) c
(3) d
(4) e
(5) f
(6) g
(7) h
(8) i
(9) j
(10) k
(11) l
(12) m
(13) n
>>> 

不过,这样的循环写法有一个约束 —— 要么循环索引,要么循环元素。于是在 Python 2.3 后新推出了 enumerate() 函数,它同时做到了这两点,我们可以这样写:

>>> for i, j in enumerate(text):
	print '(%d)' % i, j

	
(0) a
(1) b
(2) c
(3) d
(4) e
(5) f
(6) g
(7) h
(8) i
(9) j
(10) k
(11) l
(12) m
(13) n
>>> 

关于 enumerate() 函数的语法是这样:

>>> help(enumerate)
Help on class enumerate in module __builtin__:

class enumerate(object)
 |  enumerate(iterable[, start]) -> iterator for index, value of iterable
 |  
 |  Return an enumerate object.  iterable must be another object that supports
 |  iteration.  The enumerate object yields pairs containing a count (from
 |  start, which defaults to 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
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __new__ = <built-in method __new__ of type object>
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T

>>>
关于作者
麦子,80 后,现从事通信行业。安卓玩家一个人的书房朗读者。
MRJENGLISH
jsntn
jasonwtien
jasonwtien
更多…… /about.html

最近更新: