流畅的python--序列构成的数组

 

'''
容器序列  list tuple collections.deque  能存放不同类型的数据,容器序列存放的是他们所包含的任意类型的对象的引用,当对容器序列进行更改时,外部数据也会更改
扁平序列  str bytes bytearray memoryview array.array 这些序列只能容纳一种类型
可变序列  list bytearray array.array collections.deque memoryview
不可变序列  tuple str bytes
'''

#常规写法
symbols = "ABCDE"
codes = []
for symbol in symbols:
    codes.append(ord(symbol))
print(codes)
# >> [65, 66, 67, 68, 69]

#列表推导
symbols2 = "ABCDE"
#symbol = "EFGH"
codes = [ord(symbol) for symbol in symbols]
#print(symbol) #2.x 版本 结果是 H ,变量泄露, 3.x不会产生泄露
print(codes)
# >> [65, 66, 67, 68, 69]

symbols3 = "ABCDEF"
beyond_ascii = [ord(s) for s in symbols3 if ord(s)>67]
print(beyond_ascii)
# >> [68, 69, 70]

''' sysmbols3.where(c=>c>67).tolist() 在symbols3的元素中 十六进制大于67的tolist,不大于67的不tolist ''' beyond_ascii2 = list(filter(lambda c: c>67, map(ord, symbols3))) print(beyond_ascii2) # >> [68, 69, 70] #笛卡尔积 colors = ['black', 'white'] sizes = ['S', 'W', 'L'] males = ['male', 'female'] tshirts = [(color, size) for color in colors for size in sizes] print(tshirts) # >> [('black', 'S'), ('black', 'W'), ('black', 'L'), ('white', 'S'), ('white', 'W'), ('white', 'L')] for color in colors: for size in sizes: print((color, size)) ''' >> 输出 ('black', 'S') ('black', 'W') ('black', 'L') ('white', 'S') ('white', 'W') ('white', 'L') ''' tshirts2 = [(size, color) for color in colors for size in sizes] print(tshirts2) # >> [('S', 'black'), ('W', 'black'), ('L', 'black'), ('S', 'white'), ('W', 'white'), ('L', 'white')] tshirts3 = [(male, size, color) for male in males for color in colors for size in sizes] print(tshirts3) # >> [('male', 'S', 'black'), ('male', 'W', 'black'), ('male', 'L', 'black'), ('male', 'S', 'white'), ('male', 'W', 'white'), ('male', 'L', 'white'), ('female', 'S', 'black'), ('female', 'W', 'black'), ('female', 'L', 'black'), ('female', 'S', 'white'), ('female', 'W', 'white'), ('female', 'L', 'white')] #生成表达式 symbols4 = "ABCDEFG" codes4 = tuple(ord(symbol) for symbol in symbols4) print(codes4) # >> (65, 66, 67, 68, 69, 70, 71) import array codes5 = array.array('I', (ord(symbol) for symbol in symbols4)) print(codes5) # >> array('I', [65, 66, 67, 68, 69, 70, 71])

 

 

lax_coordinates = (33.9425, -118.400056)  #元组
print(lax_coordinates)
# >> (33.9425, -118.400056)
print("%s/%s" % lax_coordinates)
# >> 33.9425/-118.400056


latitude, longitude = lax_coordinates  #元组的拆包
print(latitude)
# >> 33.9425
print(longitude)
# >> -118.400056

city, year, pop, chg, area = ('Tokyo', 2003, 32450, 0.66, 8014)

traveler_ids = [('USA', '31195855'),('BRA', 'CE342567'),('ESP', 'XDA205856')]
for passport in sorted(traveler_ids):
    print('%s/%s'%passport)
'''
>>
BRA/CE342567
ESP/XDA205856
USA/31195855
'''

for country, _ in traveler_ids: # 只打印出country
    print(country)
'''
>>
USA
BRA
ESP
'''

print(divmod(20, 8))
# >> (2, 4)

t = (20, 8)
quotient, remainder = divmod(*t)
print(quotient)
# >> 2
print(remainder)
# >> 4

import os
_, filename = os.path.split('/home/luciano/.ssh/idrsa.pub')
print(filename)
# >> idrsa.pub

a,b,*rest = range(5) # 用*来处理剩下的元素,在平行赋值中, * 前缀只能用在一个变量名前面, 但是这个变量可以出现在赋值表达式的任意位置
print('%r/%r/%r' %(a,b,rest))
# >> 0/1/[2, 3, 4]

a1, b1, *rest1 = range(2) # 0 1 
print('%r/%r/%r' %(a1,b1,rest1))
# >> 0/1/[]

a2, *rest2, b2 =range(5)
print('%r/%r/%r' %(a2, rest2, b2))
# >> 0/[1, 2, 3]/4

#嵌套元组
metro_areas = [
    ('Tokyo', 'JP', 36.933, (35.689722, 139.691667)),
    ('Delhi NCP', 'IN', 21.935, (28.613889, 77.208889)),
    ('Mexico City', 'MX', 20.142, (19.433333, -99.133333))
]
print('{:15} | {:^9} | {:^9}'.format('', 'lat.', 'long.'))
fmt = '{:15} | {:9.4f} | {:9.4f}'
#嵌套式元组的拆包
for name, cc, pop, (latitude, longtitude) in metro_areas:
    if longitude <- 0:
        print(fmt.format(name, latitude, longitude))
'''
>>
                |   lat.    |   long.  
Tokyo           |   35.6897 | -118.4001
Delhi NCP       |   28.6139 | -118.4001
Mexico City     |   19.4333 | -118.4001
'''

#具名元组
from collections import namedtuple
City = namedtuple('City', 'name country population coordinates')
tokyo = City('Tokyo', 'JP', 36.933, (35.689722, 139.691667))
print(tokyo)
# >> City(name='Tokyo', country='JP', population=36.933, coordinates=(35.689722, 139.691667))
print(tokyo.population)
# >> 36.933
print(tokyo[1])
# >> JP
print(City._fields)
# >> ('name', 'country', 'population', 'coordinates')

#具名元组的属性
LatLong = namedtuple('LatLong', 'lat long')
delhi_data = ('Delhi NCP', 'IN', 21.935, (28.613889, 77.208889))
delhi = City._make(delhi_data)  #用 _make() 通过接受一个可迭代对象来生成这个类的一个实例, 它的作用跟 City(*delhi_data) 是一样的
print(delhi)
# >> City(name='Delhi NCP', country='IN', population=21.935, coordinates=(28.613889, 77.208889))
print(delhi._asdict())   #_asdict() 把具名元组以 collections.OrderedDict 的形式返回, 我们可以利用它来把元组里的信息友好地呈现出来
# >> OrderedDict([('name', 'Delhi NCP'), ('country', 'IN'), ('population', 21.935), ('coordinates', (28.613889, 77.208889))])
for key, value in delhi._asdict().items():
    print(key + ':', value)
'''
>>
name: Delhi NCP
country: IN
population: 21.935
coordinates: (28.613889, 77.208889)
'''

 

posted @ 2019-12-01 16:25  换头怪  阅读(213)  评论(0编辑  收藏  举报