Python学习笔记 04

冒泡算法

练习:<br>有如下列表:
    [13, 22, 6, 99, 11]
 
请按照一下规则计算:
13 和 22 比较,将大的值放在右侧,即:[13, 22, 6, 99, 11]
22 和 6 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
22 和 99 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
99 和 42 比较,将大的值放在右侧,即:[13, 6, 22, 11, 99,]
 
13 和 6 比较,将大的值放在右侧,即:[6, 13, 22, 11, 99,]

程序:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'wang'
#已知列表长度的方法
li = [11,2,34,21,5]
print len(li)
print '>',li
for m in range(4):
    num1 = li[m]  #获取第m个值
    num2 = li[m+1] #获取第m+1个值
    if num1 > num2:   #将较大的值放在右侧
        temp = li[m]
        li[m] = li[m+1]
        li[m+1] = temp
print '->',li
for m in range(3):
    num1 = li[m]
    num2 = li[m+1]
    if num1 > num2:
        temp = li[m]
        li[m] = li[m+1]
        li[m+1] = temp
print '-->',li
for m in range(2):
    num1 = li[m]
    num2 = li[m+1]
    if num1 > num2:
        temp = li[m]
        li[m] = li[m+1]
        li[m+1] = temp
print '--->',li
for m in range(1):
    num1 = li[m]
    num2 = li[m+1]
    if num1 > num2:
        temp = li[m]
        li[m] = li[m+1]
        li[m+1] = temp
print '---->',li  

#不知道列表长度的方法
for n in range(1,len(li)):  #1-4  1,2,3,4
    #print n
    for m in range(len(li)-n): #4-1 4,3,2,1
        num1 = li[m]
        num2 = li[m+1]
        if num1 > num2:
            temp = li[m]
            li[m] = li[m+1]
            li[m+1] = temp
print li

 

lambda表达式

条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:

# 普通条件语句
if 1 == 1:
    name = 'aresi'
else:
    name = 'wangxin'
  
# 三元运算
name = 'ares' if 1 == 1 else 'wangxin'

对于简单的函数,也存在一种简便的表示方式:lambda表达式,lambda存在意义就是对简单函数的简洁表示

# ###################### 普通函数 ######################
# 定义函数(普通方式)
def func(arg):
    return arg + 1
  
# 执行函数
result = func(123)
  
# ###################### lambda ######################
  
# 定义函数(lambda表达式)
my_lambda = lambda arg : arg + 1
  
# 执行函数
result = my_lambda(123)

示例:

def func1(arg):
    return arg + 1
result = func1(100)
print result

func2 = lambda a: a + 1
result =func2(1000)
print result

func3 = lambda a,b: a + b
result =func3(1000,123)
print result

#运行结果
101
1001
1123

 

内置函数

map函数:遍历序列,对序列中每个元素进行操作,最终获取新的序列。

每个元素增加10:

函数方式:
li = [11,22,33]
def func1(arg):
    return arg + 10
new_list = map(func1,li)
print new_list

map方式:
map实现
new_list = []
for item in li:
    new_item = item + 10
    new_list.append(new_item)
print new_list

输出结果:
[21, 32, 43]
[21, 32, 43]

两列表元素相加:

l1 = [11,22,33]
l2 = [1,2,3]
def func2(a1,a2):
    return a1 + a2
new_list1 = map(func2,l1,l2)
print new_list1

print map(lambda a1,a2:a1+a2,l1,l2)

输出结果:
[12, 24, 36]
[12, 24, 36]

filter函数:对于序列中的元素进行筛选,最终获取符合条件的序列

获取列表中大于3的元素:

li = [11,22,3,44,0,False,""]
print filter(None,li)
l1 = [11,22,33,44]
print filter(lambda a:a>33,l1)

输出结果:
[11, 22, 3, 44]
[44]

 

reduce函数:对于序列内所有元素进行累计操作

获取系列中所有元素的和:

li = [1,2,3,4,5,6,7,8]
result = reduce(lambda arg1,arg2:arg1+arg2,li)
print result

# reduce的第一个参数,函数必须要有两个参数
# reduce的第二个参数,要循环的序列
# reduce的第三个参数,初始值

输出结果:
36

 

 

yield生成器:

range 和 xrange 的区别:range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。

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

 

自定义生成器:

def mrange(arg):
    seed = 0
    while True:
        seed = seed + 1
        if seed > arg:
            return
        else:
            yield seed
for i in mrange(10):
    print i

 

文件操作的 read 和 xreadlinex :

read会读取所有内容到内存

xreadlines则只有在循环迭代时才获取

posted @ 2015-11-18 23:16  我是一条最咸的咸鱼  阅读(124)  评论(0)    收藏  举报
返回顶部