Skip to content

Instantly share code, notes, and snippets.

@neuromaancer
Last active August 25, 2019 11:55
Show Gist options
  • Save neuromaancer/2418fb060bfa4598100412c2fec6cc52 to your computer and use it in GitHub Desktop.
Save neuromaancer/2418fb060bfa4598100412c2fec6cc52 to your computer and use it in GitHub Desktop.
pythonic_code
# 列表对象(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'
>>> email
'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