【Python程序设计】字典、集合的应用

Alex_Shen
2021-08-22 / 0 评论 / 0 点赞 / 63 阅读 / 2,959 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. 列表与集合

参考 exp4.1.py,比较列表和集合在一些操作上所需要时间的差别。

import time
import random
l = [i for i in range(10**8)]
s = {i for i in range(10**8)}

startTime = time.time()
num = random.randint(0, 1e9)
if num in s:
    print("在集合")
else:
    print("不在集合")
endTime = time.time()
runTime = int((endTime - startTime) * 1000)
print("check runtime for set: ", runTime)

startTime = time.time()
num = random.randint(0, 1e9)
if num in l:
    print("在集合")
else:
    print("不在集合")
endTime = time.time()
runTime = int((endTime - startTime) * 1000)
print("check runtime for list: ", runTime)

startTime = time.time()
num = random.randint(0, 1e8)
l.remove(num)
endTime = time.time()
runTime = int((endTime - startTime) * 1000)
print("remove runtime for list: ", runTime)

startTime = time.time()
num = random.randint(0, 1e8)
s.remove(num)
endTime = time.time() 
runTime = int((endTime - startTime) * 1000)
print("remove runtime for set: ", runTime)

在这里插入图片描述
当list和set大小都为10^8时,结果如上。
set的效率明显大幅领先于list。

2. 统计关键字

统计文本 ofdm_tx_main.py 中 Python 关键字出现的次数。关键字包括

“and”, “as”, “assert”, “break”, “class”, “continue”, “def”, “del”,
“elif”, “else”, “except”, “False”, “finally”, “for”, “from”, “global”,
“if”, “import”, “in”, “is”, “lambda”, “None”, “nonlocal”, “not”, “or”,
“pass”, “raise”, “return”, “True”, “try”, “while”, “with”, “yield”

小提示:
可使用以下函数删除文本中的标点符号,即把标点符号变成" ",

import string
def removePunctuations(word):
 for ch in word:
 	if ch in string.punctuation:
 		word = word.replace(ch, " ")
 return word
import os
import string

def removePunctuations(word):
    for ch in word:
        if ch in string.punctuation or ch == '\n':
            word = word.replace(ch, " ")
    temp = word.split(' ')
    for i in range(len(temp)-1, -1, -1):
        if temp[i] == '' or temp[i] == '\n':
            del temp[i]
return temp

def cnt(dic, worlist):
    for x in wordlist:
        if x in dic.keys():
            dic[x] = dic[x]+1

keyword_list = ["and", "as", "assert", "break", "class",
                "continue", "def", "del", "elif", "else",
                "except", "False", "finally", "for", "from",
                "global", "if", "import", "in", "is", "lambda",
                "None", "nonlocal", "not", "or", "pass", "raise",
                "return", "True", "try", "while", "with", "yield"]
dic = {i: 0 for i in keyword_list}

f = open("ofdm_tx_main.py", mode='r')
while True:
    line = f.readline()
    if not line:
        break
    if line == '\n':
        continue
    wordlist = removePunctuations(line)
    print(wordlist)
    cnt(dic, wordlist)
print(dic)
f.close()

在这里插入图片描述 在这里插入图片描述

3. 统计电话号码中的数字出现次数

编写函数 NumberFrequencies(tel_num),tel_num 为 区号-电话号码 格式(如 0755-26536114),返回一个字典保存数字0~9 出现的次数,字典的键为数字,值为数字出现的次数。

dic = {str(x): 0 for x in range(10)}

telnum = input("请输入电话号码:")
for x in telnum:
    if x in dic.keys():
        dic[x] = dic[x] + 1

print(dic)

在这里插入图片描述

5. 堆的理解

描述课件中函数 heapreplace 弹出堆中最小元素,同时插入新元素时,堆的变化过程(可手写拍照)。

思路:
前提:假设建立的是小顶堆。
Heapreplace方法是将堆顶元素替换成要插入的元素,然后重新建立小顶堆。
交换规则为:自上而下,与左孩子、右孩子较小的元素进行交换,直到满足父节点小于左右孩子。
在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

import heapq
list = [1, 3, 5, 7, 4, 6, 8, 9, 11, 7, 12]

heapq.heapreplace(list, 8)
print(list)

在这里插入图片描述

0

评论区