Sophisticated 2019-06-28
代码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()
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()
翻转和排序迭代