关于 for 循环
Python 是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性。
Python 编程简明教程 https://jsntn.com/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
>>>
最近更新: