数据结构

2019-05-09  本文已影响0人  博楠同学
"""
# 如何在列表 字典 集合中根据条件筛选数据
"""

# 找出data列表中大于0的数字
from random import randint
data = [randint(-10, 10) for _ in range(10)]
result = [i for i in data if i > 0]
# print(result)

#刷选出data字典中高于90的值
data = {i: randint(60, 100) for i in range(1, 21)}
result = {k: v for k, v in data.items() if v > 90}
# print(data)
# print(result)

#筛选出data 集合中能被3整除的的值
data = set(data)
result = {i for i in data if i % 3 == 0}
# print(data)
# print(result)

# 如何为元组中的每个元素命名,提高程序可读性
# 1、
NAME, AGE, SEX, MAIL = range(4)
student = ('aaa', 19, '男', 'aa.@qq.com')
# print(student[NAME], student[AGE], student[SEX], student[MAIL])
# 2、
from collections import namedtuple
student = namedtuple('student1', ['name', 'age', 'sex', 'mail'])
s = student('aaa', 19, '男', 'aa.@qq.com')
# print(s.name, s.age, s.sex, s.mail)

# 如何统计列表中元素出现的频度
# 1、
data = [randint(0, 20) for _ in range(30)]
c = dict.fromkeys(data, 0)
for i in data:
    c[i] += 1
print(data)
print(c)
# 2、
from collections import Counter
c2 = Counter(data)
print(c2)
print(c2.most_common(3))
# 3、词频统计
import re
txt = open('.bashrc').read()
c3 = Counter(re.split('\W+', txt))
print(c3.most_common(4))

# 根据字典中的值的大小,对字典中的项排序
# 1、
data = {x: randint(60, 100) for x in 'abcdefg'}
# python2
# data = zip(data.values(), data.keys())
# python3
# data = list(zip(data.values(), data.keys()))
# print(sorted(data))

# 2、
data = sorted(data.items(), key=lambda x: x[1])
data = dict(data)
print(data)


# 如何快速找到多个字典中的公共键(key)
# 1/
from random import sample
d1 = {x: randint(1, 4) for x in sample("abcdef", randint(3, 6))}
d2 = {x: randint(1, 4) for x in sample("abcdef", randint(3, 6))}
d3 = {x: randint(1, 4) for x in sample("abcdef", randint(3, 6))}
res = []
for k in d1:
    if k in d2 and k in d3:
        res.append(k)
print(d1, d2, d3)
print(res)
# 2/
print(set(d1.keys()) & set(d2.keys()) & set(d3.keys()))
# 3、
# def get_key(data):
#     return set(data.keys())
# map和reduce的区别,都是把字典或者列表的元素给前面的函数操作,
#  map一次给一个,  reduce第一次给2个,进行操作后记录下来和后面的在做操作 python3需要引入
map(lambda v: set(v.keys()), [d1, d2, d3])
# python3需要引入reduce
from functools import reduce
data = reduce(lambda x, y: x & y, map(lambda v: set(v.keys()), [d1, d2, d3]))
print(data)


# 如果让字典保持有序

data = {}
data['zhang'] = (1, 35)
data['bo'] = (3, 45)
data['liang'] = (2, 40)

for v in data:
    print(v)
print(data)

from collections import OrderedDict

data = OrderedDict()
data['zhang'] = (1, 35)
data['bo'] = (3, 45)
data['liang'] = (2, 40)
for v in data:
    print(v)

from time import time
from random import randint
players = list("ABCDEFgh")
start = time()
d = {}
for i in range(8):
    # input("请输入:")
    p = players.pop(randint(0, 7-i))
    end = time()
    print(i + 1, p, end - start)
    d[p] = (i + 1, end - start)

print(d)


print(d.items())
d = sorted(d.items(), key=lambda v: v[1][1], reverse=True)
print(dict(d))

# 如何实现用户的历史记录功能

from collections import deque
history = deque([], 5)

N = randint(0, 100)
def guess(k):
    if k == N:
        print('right')
        return True
    elif k > N:
        print("%d 比设置值大" % (k,))
        return False
    else:
        print("%d 比设置值小" % (k,))
        return False
while True:
    line = input("请输入一个数字:")
    if line.isdigit():
        k = int(line)
        history.append(k)
        if guess(k):
            break
    elif line == 'history' or line == 'h?':
        print(list(history))
    elif line == 'exit':
        print("game over")
        break

import pickle

pickle.dump(history, open('history', 'w'))
p2 = pickle.load(open('history'))
print(p2)





上一篇下一篇

猜你喜欢

热点阅读