循环
while
代码1
x = 1
while x <= 100
print x
x += 1
代码2
在程序要求输入名字时按下回车,程序会再次要求输入名字,因为name是空字符串,值为false。
name = ''
while not name:
name = raw_input('your name:')
print name
# while not name or name.isspace()
# while not name.strip()
for
words = ['this','is','AJ1']
for word in words:
print word
numbers = [1,2,4,5,6,7]
for num in numbers:
print num
Range()
内建的范围函数range()
range(1,10)
#output: [0,1,2,3,4,5,6,7,8,9]
#打印1~100
for num in range(1,100):
print num
Range()
vs xrange()
range()一次创建整个序列
xrange()一次只创建一个数
迭代巨大的序列时,xrange()更加高效
遍历字典
遍历字典的所有键
d = {'x':1, 'y':2, 'z':3}
for key in d:
print key, d[key]
# 取值: 用 d.values 代替 d.keys
items()
方法items()
方法返回键值对元组,for
可以循环中使用序列解包
for key, value in d.items():
print key,value
注:字典元素顺序不确定
迭代工具
并行迭代
同时打印名字和对应年龄
names = ['afra', 'ala', 'joe', 'bob']
ages = [1,2,3,4]
for i in range(len(names)):
print name[i], age[i]
# i 为循环索引
zip()
zip()
将多个序列组合成一个元组列表。处理不等长序列时,止于最短序列。
zip(names, age)
# [('afra',1),('ala',2),('joe',3),('bob',4)]
# 循环解包元组
for name, age in zip(name, ages):
print name,age
#不等长序列
zip(range(5), xrange(10000))
按索引迭代
任务:访问序列对象,同时获取当前对象索引。例如,在字符串中替换包含‘xxx’的子字符串。
版本一(不推荐):
for string in strings:
if 'xxx' in string:
index = strings.index(string)
string[index] = '[replace]'
版本二:
index = 0
for string in strings:
if 'xxx' in string:
strings[index] = '[replace]'
index += 1
# 这段代码在《Python基础教程第二版》P79, 我认为原书代码中 index+=1 的缩进格式应该是错了?
版本三(推荐):
使用内建函数 enumerate()
翻转和排序迭代