cookbook 1. 數據結構和算法

1.1 將序列分解爲單獨的變量

任何可迭代的對象均可以經過一個簡單的賦值操做來分解爲單獨的變量。惟一的要求是變量的總數和序列相吻合。python

p = (4,5)  # tuple
x,y = p
print(x)

data = ['alice', 50, 91.1, (2012,12,21)]  # list & tuple
name, shares, price, (year,mon,day) = data
print(name)

s = 'hello'   # string
a,b,c,d,e = s
print(c)

 在分解操做中,可能想丟棄某些特定的值。 一般能夠用一個用不到的變量名,以此做爲用不到的值的名稱。spa

data1 = ['amy', 45, 89.2, (2015, 8, 10)]
_, shares, price, _ = data1
print(shares)

 

1.2 從任意長度的可迭代對象中分解元素

語法: *expr 對象

*expr 能夠聽任何位置,包括第一位。 不過不過若是可迭代對象的長度超過n,就會致使"too many values to unpack"的異常。blog

# 例一
record = ('dave', 'dave@example.com', '888-555-1212','746-666-1212')
name, email, *phone_number = record
print(phone_number)
# 返回: ['888-555-1212', '746-666-1212']


# 例二
sales_record = [10,8,7,1,9,5,10,3]
*trailing_qtrs, current_qtrs = sales_record
print(trailing_qtrs)  # 返回:[10, 8, 7, 1, 9, 5, 10]
print(current_qtrs)   # 返回:3


# 例三:*expr 常常用於迭代一個變長的元組數列。
record1 = [
    ('foo',1,2),
    ('bar', 'hello'),
    ('foo', 3,4)
]
def do_foo(x,y):
    print("foo", x, y)

def do_bar(s):
    print("bar", s)

for tag, *args in record1:
    if tag == "foo":
        do_foo(*args)
    elif tag == "bar":
        do_bar(*args)


# 例四: 字符串處理,與string.split()一塊兒用
line = "nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false"
uname, *field, homedir, sh = line.split(':')
print(uname,"\t", homedir, "\t", sh)
# 返回:nobody 	 /var/empty 	 /usr/bin/false

 

1.3 保存最後N個元素字符串

相關文章
相關標籤/搜索