留作日后参考用: 

# L1 = ['1', '2', '3']
# L2 = [x for x in L1]
# print(L2)

# def add(a, b, f):
# return f(a) + f(b)
#
#
# print(add(-5, 6, abs))

# def f(x):
# return x * x
#
#
# r = map(f, [1, 3, 6, 9])
# print(list(r))

# print(list(map(str, [1, 4, 8, 4, 5])))

# print(bool())
# print(bool(0))
# print(bool(1))
# print(bool("1"))
# print(bool("0"))
# print(bool(""))

# s = "abcc"
# x = "c"
# print(s.count(x))

# symbols = "$%&^*7"
# codes = []
# for symbol in symbols:
# codes.append(ord(symbol))
#
# print(codes)
#
# symbols = "$%&^*7"
# codes = [ord(symbol) for symbol in symbols]
# print(codes)

# colors = ['white', 'black']
# sizes = ['S', 'M', 'L']
# shirts = [(color, size) for color in colors for size in sizes]
# print(shirts)

# symbols = "$%&^*7"
# print(tuple(ord(symbol) for symbol in symbols))
#
# import array
# print(array.array('I', (ord(symbol) for symbol in symbols)))

# lax_coor = (33.9425, -118.408056)
# lon, lat = lax_coor
# print(lon)
# print(lat)
# city, year, pop, chg, area = ('Tokyo', 2003, 32450, 0.66, 8014)
# print(city)
# traveler_ids = [('USA', '31195855'), ('BRA', 'CE342567'), ('ESP', 'XDA205856')]
# for passport in sorted(traveler_ids):
# print('%s/%s' % passport)
#
# for country, _ in traveler_ids:
# print(country)

# t = (20, 8)
# print(divmod(*t))

# import os
# _, filename = os.path.split('/home/sophia/lalala/hehehe/111.bcp')
# print(filename)

# a, b, *rest = range(0, 5)
# print(a, b, rest)
#
# a, *rest, b = range(0, 5)
# print(a, rest, b)

# metro_areas = [
# ('Tokyo', 'JP', 36.933, (35.68, 139.69)),
# ('Delhi NCR', 'IN', 21.935, (28.61, 77.20)),
# ('Mexico City', 'MX', 20.142, (19.43, -99.13)),
# ('New York-Newark', 'US', 20.104, (40.808611, -74.020386)),
# ('Sao Paulo', 'BR', 19.649, (-23.54, -46.63))
# ]
#
# print('{:15} | {:^9} | {:^9}'.format('', 'lat.', 'long.'))
# fmt = '{:15} | {:9.4f} | {:9.4f}'
# for name, cc, pop, (lat, lon) in metro_areas:
# if (lon <= 0):
# print(fmt.format(name, lon, lat))

# from collections import namedtuple
#
# City = namedtuple('City', 'name country population coordinates')
# tokyo = City('Tokyo', 'JP', 36.933, (35.68, 139.69))
# print(tokyo)
# print(tokyo.population)
# print(tokyo.coordinates)
# print(tokyo[1])
# print(City._fields) #查看字段名
#
# LatLong = namedtuple('LatLong', 'lat long')
# delhi_data = ('Delhi NCR', 'IN', 21.935, LatLong(28.61, 77.20))
# delhi = City._make(delhi_data)
# print(delhi)
# print(delhi._asdict())
# for key, value in delhi._asdict().items():
# print(key + ':' + str(value))

# a = [1, 2, 3]
# b = ['mac', 'python']
# c = 'linux'
#
# a.append(b)
# a.append(c)
# print(a)
# a = [1, 2, 3]
# a.extend(b)
# print(a.extend(c))
# a = [1, 2, 3]
# a.__iadd__(b)
# print(a.__iadd__(c))

# import copy
#
# a = [1, 2, 3, 4, ['a', 'b']]
# print('原 a= ', a)
#
# b = a # 直接复制,对象的引用,相当于别名
# c = copy.copy(a) # 浅拷贝,只拷贝了父对象,不会拷贝对象的内部的子对象
# d = a.copy() # 浅拷贝,只拷贝了父对象,不会拷贝对象的内部的子对象
# e = copy.deepcopy(a) # 深拷贝,完全拷贝了父对象及其子对象
#
# a.append(5)
# a[4].append('c')
#
# print('后 a= ', a)
# print('赋 值 b= ', b)
# print('浅拷贝 c= ', c)
# print('浅拷贝 d= ', d)
# print('深拷贝 e= ', e)
# l = list(range(10))
# print(l)
# l[2:5] = [20, 30]
# print(l)
# del l[5:7]
# print(l)
# l[3::2] = [11, 22]
# print(l)
# #错误: l[2:5] = 100
# l[2:5] = [100]
# print(l)
# l[2:3] = [200]
# print(l)

# 引用和可变对象背后的原理和陷阱
# print(['_'] * 3)
# board = [['_'] * 3 for i in range(3)]
# print(board)
# board[1][2] = 'X'
# print(board)
#
# board = [['_'] * 3] * 3
# print(board)
# board[1][2] = 'X'
# print(board)
#
# # 相当于第一种
# board = [['_'] * 3, ['_'] * 3, ['_'] * 3]
# print(board)
# board[1][2] = 'X'
# print(board)
#
# # 同第二种
# row = ['_'] * 3
# board = []
# for i in range(3):
# board.append(row)
# board[1][2] = 'X'
# print(board)
#
# # 同第一种
# board = []
# for i in range(3):
# row = ['_'] * 3
# board.append(row)
# board[1][2] = 'X'
# print(board)

# l = [1, 2, 3]
# print(id(l))
# l *= 2
# print(l)
# print(id(l))
#
# t = (1, 2, 3)
# print(id(t))
# t *= 2
# print(id(t))

# t = (1, 2, [30, 40])
# try:
# t[2] += [50, 60] #有效果,但是会把报错
# except Exception as e:
# print(e)
# print(t)
# try:
# t[2].extend([50, 60]) #有效果,且不会报错
# except Exception as e:
# print(e)
# print(t)

# from dis import dis
# dis('s[a] += b')

# fruits = ['grape', 'raspberry', 'apple', 'banana']
# print(sorted(fruits, key=len, reverse=False))
# print(fruits)
# fruits.sort()
# print(fruits)

# import bisect
# import sys
#
# HAYSTACK = [1, 4, 5, 6, 8, 12, 15, 20, 21, 23, 26, 29, 30]
# NEEDLES = [0, 1, 2, 5, 8, 10, 22, 23, 29, 30, 31]
# ROW_FMT = '{0:<2d} @ {1:<2d} {2}{0:<2d}'
#
#
# def demo(bisect_fn):
# for needle in reversed(NEEDLES):
# position = bisect_fn(HAYSTACK, needle)
# offset = position * ' |'
# print(ROW_FMT.format(needle, position, offset))
#
#
# def main(name):
# if name == 'left':
# bisect_fn = bisect.bisect_left
# else:
# bisect_fn = bisect.bisect
# print('DEMO:', bisect_fn.__name__)
# print('haystack ->', ' '.join('%2d' % n for n in HAYSTACK))
# demo(bisect_fn)
#
#
# if __name__ == '__main__':
# main(sys.argv[-1])

# import bisect
# HAYSTACK = [1.0, 4, 5, 6, 8, 12, 13, 15, 20, 21, 23, 26, 29, 30]
# index1 = bisect.bisect_left(HAYSTACK, 1)
# index2 = bisect.bisect_right(HAYSTACK, 1)
# print(index1)
# print(index2)
#
# # 计算等级
# def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
# i = bisect.bisect(breakpoints, score)
# return grades[i]
#
# l = [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
# print(l)

# import bisect
# import random
# SIZE = 7
# random.seed(1729)
#
# my_list = []
# for i in range(SIZE):
# new_item = random.randrange(SIZE * 2)
# bisect.insort(my_list, new_item)
# print('%2d ->' % new_item, my_list)

# from array import array
# from random import random
# floats = array('d', (random() for i in range(10**7)))
# print(floats[-1])
# fp = open('floats.bin', 'wb')
# floats.tofile(fp)
# fp.close()
#
# floats2 = array('d')
# fp2 = open('floats.bin', 'rb')
# floats2.fromfile(fp2, 10**7)
# fp2.close()
# print(floats2[-1])

# import array
# numbers = array.array('h', [-2, -1, 0, 1, 2])
# memv = memoryview(numbers)
# print(len(memv))
# print(memv[0])
# memv_oct = memv.cast('B')
# print(memv_oct.tolist())
# print(memv_oct[5])
# memv_oct[5] = 4
# print(numbers)

# import numpy
# a = numpy.arange(12)
# print(a)
# print(type(a))
# print(a.shape)
# a.shape = 3, 4
# print(a)
# print(a[2])
# print(a[:, 1])
# print(a.transpose()) #行和列交换

# import numpy
# floats = numpy.loadtxt('lalala.txt')
# print(floats[-3:])
# floats *= .5
# print(floats[-3:])
# from time import perf_counter as pc
# t0 = pc()
# floats /= 3
# print(pc() - t0)
# numpy.save('floats-10M', floats)
# floats2 = numpy.load('floats-10M.npy', 'r+')
# floats2 *= 6
# print(floats2[-3:])

# 双向队列
# from collections import deque
# dq = deque(range(10), maxlen=10)
# print(dq)
# dq.rotate(3)
# print(dq)
# dq.rotate(-4)
# print(dq)
# dq.appendleft(-1)
# print(dq)
# dq.extend([11, 22, 33])
# print(dq)
# dq.extendleft([10, 20, 30, 40])
# print(dq)

l = [28, 14, '28', 5, '9', '1', 0, 6, '23', 19]
print(sorted(l, key=int))
print(sorted(l, key=str))