python筆記day4

冒泡算法

方法一:

循環次數+一次循環比較的次數=列表長度len(L)-1

使用兩層for循環,第一層循環控制循環次數,第二層循環控制比較次數,兩次循環之間有關聯

#!/usr/bin/env python
# -*- coding:utf-8 -*-
li = [
99,22,11,6,3]
for n in range(1,len(li)-1):  --->循環次數
   
for i in range(len(li)-n):   --->一次循環中比較次數
       
if li[i] > li[i+1]:
            tmp = li[i]
            li[i] = li[i+
1]
            li[i+
1] = tmp
print li


方法二:

邏輯上分成兩個列表,一個從第一個元素到倒數第二個元素,一個從第二個元素到最後一個元素

兩個列表相同索引的兩個元素比較,比較到最後也能排序成功

L = [88,33,99,66,22,33,77]
L1 = [88,33,99,66,22,33]
L2 = [33,99,66,22,33,77]

#!/usr/bin/env python
# -*- coding:utf-8 -*-L = [,,,,,,]

m ((L)-):
    n (m+,(L)):
        L[m] > L[n]:
            tmp = L[m]
            L[m] = L[n]
            L[n] = tmp
L


排序在開發中用的很多,主要用在按照時間排序,按照字母排序等場合。

但是冒泡排序的效率不高,因爲用到了兩次for循環和若干次值的替換。



haproxy配置文件查詢函數,將對應的backend後的內容取出

haproxy.txt配置文件:

frontend carrick.org

  bind 0.0.0.0:80

  option httplog

  option httpclose

  option forwardfor

  log global

  acl www hdr_reg(host) -i www.carrick.org

  use_backend www.carrick.org if www


backend www.carrick.org

  server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000

  server 100.1.7.10 100.1.7.10 weight 20 maxconn 3000


# backend buy.carrick.org

  server 100.1.7.9 100.1.7.9 weight 20 maxconn 3001

  server 100.1.7.9 100.1.7.9 weight 20 maxconn 3001


backend buy.carrick.org

  server 100.1.7.9 100.1.7.9 weight 20 maxconn 3002

  server 100.1.7.9 100.1.7.9 weight 20 maxconn 3002


# backend buy.carrick.org

  server 100.1.7.9 100.1.7.9 weight 20 maxconn 3003

  server 100.1.7.9 100.1.7.9 weight 20 maxconn 3003


backend show carrick.org

  server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000

代碼:

fetch.py

fetch(backend):
    flag = fetch_list = []
    (,) obj:
        line obj:
            line.strip().startswith(% backend):
                flag = flag :
                fetch_list.append(line.strip())
            flag line.strip().strip().strip().startswith():
                = (fetch_list)
result = fetch()
result

運行結果:

['server 100.1.7.9 100.1.7.9 weight 20 maxconn 3002', 'server 100.1.7.9 100.1.7.9 weight 20 maxconn 3002']

分析:

  1. 黃色部分的line.strip()是爲了去掉backend最後一行的空行

  2. 黃色部分的not line.strip().startswith("#")是爲了不將第二個# backend的內容追加進來

如果第二個if和第三個if換順序,就不需要加黃色部分的not line.strip().startswith("#"),因爲這樣會在插入第二個# backend之前將整個循環結束掉

3. 學會使用單if語句,學會使用flag加標誌位,學會使用continue跳出本次for循環,也就是跳到了下一行,學會使用break跳出整個for循環

4. strip()可以去掉行結尾的空格,可以去掉空行,也可以去掉回車\n,如果寫成strip('#'),也可以去掉開頭的#,但是無法去掉開頭的空格,也無法去掉兩個字符串中間的空格

5. flag是爲了判斷行是否可以取到fetch_list列表中


haproxy配置文件添加函數,添加配置文件

流程圖:

wKioL1l0EObg4uyqAABmn-EVjDc842.png-wh_50

代碼:







注意:

python必須先定義函數,然後在調用函數。如果調用函數在定義函數之前,就會報錯。

JAVA和C#可以先調用函數,再定義函數


簡化的if else ==>三元運算

簡化的函數定義 ==> lambda表達式

def func(arg):

    return arg + 1

等價於

func = lambda arg: arg + 1


func1(arg):
    arg + result = func1()
result

func2 = a : a + result = func2()
result

執行結果:

101

1001

lambda函數只用於處理簡單的函數,會自動執行return

lambda表達式也可以接動態參數

func3 = lambda a,**kwargs : xxx


map函數

用於對序列(元組,列表)統一進行操作

兩個參數的情況:

li = [33,55,77]
def func(a):
   
return a + 10
new_li = map(func,li)
print new_li

執行結果:

[43, 65, 87]

 

多個參數的情況:

li1 = [33,55,77]
li2 = [
4,5,6]
def func(a1,a2):
   
return a1 + a2
new_li =
map(func,li1,li2)
print new_li

執行結果:

[37, 60, 83]

 

列表個數不一致的情況:

li1 = [33,55,77]
li2 = [
4,5,6]
li3 = [
1,2]
def func(a1,a2,a3):
    
ifnot a3:   --->a3默認爲none,在函數體內給a3做個判斷,如果a3爲none,給a3複製爲123,這樣就可以不報錯的執行了
        a3 =
123
   
return a1 +a2 + a3
new_li =
map(func,li1,li2,li3)
print new_li

執行結果:

[38, 62, 206]

 

lambda表達式的寫法:

li1 = [33,55,77]
li2 = [
4,5,6]
li3 = [
1,2,3]
def func(a1,a2,a3):
   
return a1 +a2 + a3
print map(lambda a1,a2,a3:a1 + a2 + a3,li1,li2,li3)

執行結果:

[38, 62, 86]


filter函數

filter函數會對序列(元組,列表)進行處理,只有返回值爲True的纔會放到新列表中

filter(None,)  --->只過濾出bool值爲真的元素

代碼:

li = [33,55,'','Carrick',0,False] --->空字符串,0,False的布爾值都爲假,因此被過濾掉了
print filter(None,li)

執行結果:

[33, 55, 'Carrick']

 

filter(func,)  --->通過函數來判斷哪些會被過濾掉

li = [33,55,44,'Carrick',0,False]
print filter(lambda a:a > 33,li)

執行結果:

[55, 44, 'Carrick']

返回值爲真的,纔會被過濾出來。44,55都大於33,因此返回值爲真,非空字符串Carrick也大於33,因此都被過濾出來

相當於如下的代碼:

li = [33,44,55,'Carrick',0,False]
def func(a):
   
if a >33:
       
return a
result =
filter(func,li)
print result

執行結果:

[55, 44, 'Carrick']




















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章