Last active
August 25, 2019 11:55
-
-
Save neuromaancer/2418fb060bfa4598100412c2fec6cc52 to your computer and use it in GitHub Desktop.
pythonic_code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 列表对象(list)是一个查询效率高于更新操作的数据结构,比如删除一个元素和插入一个元素时执行效率就非常低,因为还要对剩下的元素进行移动 | |
names = ['raymond', 'rachel', 'matthew', 'roger', | |
'betty', 'melissa', 'judith', 'charlie'] | |
names.pop(0) | |
names.insert(0, 'mark') | |
## pythonic | |
from collections import deque | |
names = deque(['raymond', 'rachel', 'matthew', 'roger', | |
'betty', 'melissa', 'judith', 'charlie']) | |
names.popleft() | |
names.appendleft('mark') | |
#序列解包 | |
p = 'vttalk', 'female', 30, 'python@qq.com' | |
name = p[0] | |
gender = p[1] | |
age = p[2] | |
email = p[3] | |
## pythonic | |
name, gender, age, email = p | |
# 带有索引位置的集合遍历 | |
colors = ['red', 'green', 'blue', 'yellow'] | |
for i in range(len(colors)): | |
print (i, '--->', colors[i]) | |
## pythonic | |
for i, color in enumerate(colors): | |
print (i, '--->', color) | |
# 链式比较操作 | |
age = 18 | |
if age > 18 and age < 60: | |
print("young man") | |
## pythonic | |
if 18 < age < 60: | |
print("young man") | |
#for/else语句 : for else 是 Python 中特有的语法格式,else 中的代码在 for 循环遍历完所有元素之后执行。 | |
flagfound = False | |
for i in mylist: | |
if i == theflag: | |
flagfound = True | |
break | |
process(i) | |
if not flagfound: | |
raise ValueError("List argument missing terminal flag.") | |
## pythonic | |
for i in mylist: | |
if i == theflag: | |
break | |
process(i) | |
else: | |
raise ValueError("List argument missing terminal flag.") | |
# 获取字典元素 | |
d = {'name': 'foo'} | |
if d.has_key('name'): | |
print(d['name']) | |
else: | |
print('unkonw') | |
## pythonic | |
d.get("name", "unknow") | |
# 预设字典默认值: 通过 key 分组的时候,不得不每次检查 key 是否已经存在于字典中。 | |
data = [('foo', 10), ('bar', 20), ('foo', 39), ('bar', 49)] | |
groups = {} | |
for (key, value) in data: | |
if key in groups: | |
groups[key].append(value) | |
else: | |
groups[key] = [value] | |
## pythonic | |
### 第一种方式 | |
groups = {} | |
for (key, value) in data: | |
groups.setdefault(key, []).append(value) | |
### 第二种方式 | |
from collections import defaultdict | |
groups = defaultdict(list) | |
for (key, value) in data: | |
groups[key].append(value) | |
# 字典推导式 | |
numbers = [1, 2, 3] | |
my_dict = {number: number * 2 for number in numbers} | |
print(my_dict) # {1: 2, 2: 4, 3: 6} | |
## 还可以指定过滤条件 | |
my_dict = {number: number * 2 for number in numbers if number > 1} | |
print(my_dict) # {2: 4, 3: 6} | |
##不推荐 | |
if my_dict.has_key(key): | |
...do something with d[key] | |
##推荐 | |
if key in my_dict: | |
...do something with d[key] | |
## 解压可迭代对象赋值给多个变量 | |
>>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212') | |
>>> name, email, *phone_numbers = record | |
>>> name | |
'Dave' | |
'dave@example.com' | |
>>> phone_numbers | |
['773-555-1212', '847-555-1212'] | |
from operator import itemgetter | |
rows_by_fname = sorted(rows, key=itemgetter('fname')) | |
rows_by_uid = sorted(rows, key=itemgetter('uid')) | |
print(rows_by_fname) | |
print(rows_by_uid) | |
rows_by_lfname = sorted(rows, key=itemgetter('lname','fname')) | |
print(rows_by_lfname) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment