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个元素字符串

相关文章
相关标签/搜索