Python基础(三):循环

Python循环

程序一般是顺序执行,if else 也是顺序执行的;而循环(cycle)是控制程序执行流程的;

循环是程序的主要过程之一,对于列表的访问,数列的计算都有很好的用途。在迭代过程中很有用,还有就是等比,等差数列和一些不是很容易求的数列都可以通过循环来进行求解。

Python循环只有两种while , for

# while 循环
count = 0
while count < 10:
    print "the count is ", count
    count += 1
print '循环结束'

while....else满足执行里面的,不满足执行else语句块

for循环在迭代读取方面很好用:

for item in iterable:
    do something 

例子:for循环只要两句,while循环却要四句

# 遍历字符串
a = 'python'
print a[0:2]
# 使用while遍历a
i = 0
while i < len(a):
    print a[i]
    i += 1
#使用range()判断是不是在范围
k = 0
while k in range(len(a)):
    print a[k]
    k += 1
# 使用for循环遍历a
for i in a:
    print i
#使用下表读取:
for i in range(len(a)):
    print a[i]

for循环对字典的读取

字典是无序的,所以for读取时候就不能通过下标进行读取,而是通过name值读取对应的value

#字典先找到keys()值,然后再通过key去找value
city = {'张三':['a','b','c'],'李四':[1,2,3,4,5]}
for name in city.keys():
    for c in city[name]:
        print name, c

enumerate()函数,自动生成下表

# for 下标 ,值 in enumerate()
letter = ['a', 'b', 'c', 'd', 'e']
for index, value in enumerate(letter):
    print value, 'is', index
输出:
a is 0
b is 1
c is 2
d is 3
e is 4

zip()

同时操作两个列表zip()函数:里面参数是可迭代的对象:

如果各个迭代器的元素个数不一致,则按照最小的返回

list1 = ['hello', 'world', 'yes']
list2 = [1, 2, 3]
print zip(list1, list2)
print zip(list2, list1)
输出:
[('hello', 1), ('world', 2), ('yes', 3)]
[(1, 'hello'), (2, 'world'), (3, 'yes')]

不一致情况:

list1中去掉一个元素
list1 = ['hello', 'world']
list2 = [1, 2, 3]
print zip(list1, list2)
print zip(list2, list1)
输出:
[('hello', 1), ('world', 2)]
[(1, 'hello'), (2, 'world')]

在字典中的情况:

list1 = (1, 2, 3)
dict1 = {'num1': 'one', 'num2': 'two', 'num1': 'three'}
# .keys() 获取字典中所有的键值 .values()获取字典中所有的值
print dict1.keys()
print dict1.values()
print zip(list1, dict1)

list2 = [1, 2]
# append 操作是无返回值的,所以打印是None
print list2.append(3)

zip()反向操作,把组合的数在反转成原来的列表形式:

# 反向操作 zip(*xxx)
num1 = [2, 4, 6, 8]
num2 = [1, 3, 5, 7]
result = zip(num1, num2)
print result
result.append((10, 19))
print result
print zip(* result)
#输出结果:
[(2, 1), (4, 3), (6, 5), (8, 7)]
[(2, 1), (4, 3), (6, 5), (8, 7), (10, 19)]
[(2, 4, 6, 8, 10), (1, 3, 5, 7, 19)]

循环嵌套

for  a in range(4):
    print '------------'
    for b in range(3):
        print b,
    print ''

推导式,列表的解析式:

速度比for循环更高效推导式代码少,运行速度快

# 把大写英文变成小写
print [x.lower() for x in list('ABCDEF')]
print [x.upper() for x in 'adbcef']
# 输出:
['a', 'b', 'c', 'd', 'e', 'f']
['A', 'D', 'B', 'C', 'E', 'F']
# 字典的推导式
print {i: i+1 for i in range(4)}
print {i: j for i, j in zip(range(3), 'abc')}
输出:
{0: 1, 1: 2, 2: 3, 3: 4}
{0: 'a', 1: 'b', 2: 'c'}

字典的推导式:因为键值对存在,所以有所不同

e = {key:value for key ,value in list}

break,continue,pass

都是只对当前一层循环起作用;

示例:

#正常不带break和pass的语句:
for i in range(4):
    print i
    for j in range(5):
        # if j == 2:# break #continue
        print j,
    print
#输出:
0
0 1 2 3 4
1
0 1 2 3 4
2
0 1 2 3 4
3
0 1 2 3 4

continue 跳过这一次循环:

# continue 跳过本次循环
for i in range(4):
    print i
    for j in range(5):
        if j == 2:
            continue
        print j,
    print
输出:
0  #第一层循环输出
0 1 3 4 #第二层循环输出 ,其中第二层循环的j==2时的布输出了
1
0 1 3 4
2
0 1 3 4
3
0 1 3 4

break 跳出整个循环;

# continue 跳过本次循环
for i in range(4):
    print i
    for j in range(5):
        if j == 2:
            break #break
        print j,
    print
#输出:
0
0 1
1
0 1
2
0 1
3
0 1

pass 是空语句保持完整性:

例子:

for i in range(10):
    pass # 保持代码的完整性

for … else: else是在for循环正常执行完(不是通过break语句而中断的)会执行的语句:

# 13、使用while输出1-100内的质数 ,类似于 2,3,5,7,11,13....
x = 1
while x < 100:
    tmp = x // 2
    while tmp > 1:
        if x % tmp == 0:
            break
        else:
            tmp -= 1
    else:  # 这个else是跟while关联的,这样就当while都循环完成了以后就会执行else,用这个可以巧妙的进行打印质数,当所有
        print x,
    x += 1
i = 0
while 8*(2**i) < 8848130:
    i += 1
else:
    print i

range()

函数前开后闭;例子:

print range(10)
print range(0,10,1)
print range(10,-1,-5)
print range(10,2) # 默认步长是加一,这个里面没有办法所以输出为空
print range(-3,-1)
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 5, 0]
[]
[-3, -2]

猜你喜欢

转载自blog.csdn.net/u010700066/article/details/80819065