Python技巧之数据结构与算法

2017-10-26 22:49:26 字数 1663 阅读 467 评论 0

如何在列表,字典, 集合中根据条件筛选数据

from random import randint

'''
如何在列表,字典,集合中根据条件筛选数据
'''

'''
过滤列表[-52, -105, 99, 63, ...]中的负数
'''
# 创建一个随机列表
data = [randint(-110, 100) for _ in range(10)]
print(data)
# 1.通过for循环迭代的方式,略过(效率低)
# 2.通过filter函数
res = filter(lambda x: x >= 0, data)
print(list(res))
# 3.通过列表解析(相对于filter函数,效率较高)
res = [x for x in data if x >= 0]
print(list(res))

'''
筛选出字典{'Bob':79,'Jim':80,'Tim':92...}中值高于90的项
'''
data = {x: randint(60, 100) for x in range(1, 10)}
print(data)
# 字典解析
res = {k: v for k, v in data.items() if v > 90}
print(res)

'''
筛选出集合{55,85,63,66,33,...}中能被3整除的元素
'''
data = {randint(0, 100) for x in range(10)}
print(data)
# 集合解析
res = {x for x in data if x % 3 == 0}
print(res)

如何为元组中的每个元素命名, 提高程序可读性

from collections import namedtuple, Counter
from random import randint

'''
如何为元祖中的每个元素命名,提高程序的可读性
'''

# 1. 通过常量
NAME, AGE, GENDER = range(3)
student = ('Bob', '18', '男')
print(student[NAME])

# 2. 通过collections.namedtuple
Student = namedtuple('Student', ['name', 'age', 'gender'])
res = Student('Bob', '18', '男')
print(res.name)

统计序列中元素的出现次数

'''
统计序列中元素的出现次数
'''

data = [randint(15, 20) for _ in range(12)]
print(data)
# 1.通过字典
c = dict.fromkeys(data, 0)
for x in data:
    c[x] += 1
print(c)

# 2.通过collections.Counter.most_common
print(Counter(data).most_common(2))

如何根据字典中值的大小,对字典中的项排序

'''
如何根据字典中值的大小,对字典中的项排序
某班英语成绩以字典形式存储为{'Bob':66,'Alan':78,'Jim':33...},根据成绩高低,计算学生排名
使用内置函数sorted
'''
data = {x: randint(20, 100) for x in 'ABCDEFG'}
print(data)
# 1.使用zip将字典转元组再排序
new_data = zip(data.values(), data.keys())
res = sorted(new_data)
print(res)

# 2.利用sorted函数的key参数
res = sorted(data.items(), key=lambda i: i[1])
print(res)
标签: Python

评论(0)

请先登陆,参与评论。

    聚合标签