#enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,
#同时列出数据和数据下标,一般用在 for 循环当中。
#enumerate 用法:
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons)) # [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
d = dict(zip(range(4) , seasons)) # {0: 'Spring', 1: 'Summer', 2: 'Fall', 3: 'Winter'}
list(enumerate(seasons, start=1)) # 下标从 1 开始
# [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
print (i, element)
#0 one
#1 two
#2 three
# 将任意一组数据映射到 0-1 区间,并按照其概率大小,选取
import numpy as np
x = [0.4,0.3,0.6,0.3,0.7,0.8]
x = x[0:3]
print(x) #[0.4, 0.3, 0.6]
# 归一化
y = [temp/sum(x) for temp in x] #[0.30769230769230776, 0.23076923076923078, 0.46153846153846156]
print(y)
r = np.random.rand(1) # 随机生成 0-1 之间的数
prosum =np.cumsum(y) # 对 y 值,累加
print(prosum) #[0.30769231 0.53846154 1.0]
print(r) #[0.75915732]
index = np.searchsorted(prosum , r) # 查找 r 在 prosum 中哪2个数之间,返回下标值(右)
print(index[0]) # 2 index为numpy.ndarray 类型
# numpy返回 序列中最大的前 n 个数的 下标
import numpy as np
top_k=3
arr = np.array([1, 3, 2, 4, 5])
top_k_idx=arr.argsort()[::-1][0:top_k]
print(top_k_idx) #[4 3 1]
# pattern 用法:
import jieba
import re
rules = u'[\u4e00-\u9fa5]' # 汉字编码集合
pattern = re.compile(rules) #设置匹配形式
line = "我 相信 ,我能行了,我喜欢看《复联》。"
line = pattern.findall(line) # 可以去除 空格,逗号, 《》 。 等非汉字
print(line) #['我', '相', '信', '我', '能', '行', '了', '我', '喜', '欢', '看', '复', '联'] list
line = "".join(line) # 转换成 str
print(line)# 我相信我能行了我喜欢看复联 str
# filter 用法
import jieba
line ="LSTM结构中是一个神经网络,即下图的结构就是一个LSTM单元,里面的每个黄框是一个神经网络,\
这个网络的隐藏单元个数我们设为hidden_size,那么这个LSTM单元里就有4*hidden_size个隐藏单元。\
"
stopwords = ['的','下','一','LSTM'] # 此处只是举例子
segs=jieba.lcut(line) #利用结巴分词进行中文分词
segs = filter(lambda x: len(x) > 2,segs) #去掉长度小于2的词
segs=filter(lambda x: x not in stopwords, segs) #去掉停用词
segs = list(segs) # segs 为 filter 类型
print(segs)# ['神经网络', '神经网络', 'hidden', 'size', 'hidden', 'size']
#os.path.join()函数用于路径拼接文件路径。
#os.path.join()函数中可以传入多个路径:
#会从第一个以”/”开头的参数开始拼接,之前的参数全部丢弃。
#在上一种情况确保情况下,若出现”./”开头的参数,会从”./”开头的参数的上一个参数开始拼接。
import os
print("1:",os.path.join('aaaa','/bbbb','ccccc.txt')) # 1: /bbbb\ccccc.txt
print("2:",os.path.join('/aaaa','/bbbb','/ccccc.txt')) # 2: /ccccc.txt
print("3:",os.path.join('aaaa','./bbb','ccccc.txt')) # 3: aaaa\./bbb\ccccc.txt
# 集合去重处理
poems = file.readlines()
l2 = set(poems) # 集合去重
file2 = open(path2, 'w',encoding='utf-8')
for i in range(len(l2)):
s = str(l2.pop()) # 从末尾取出一个元素
file2.writelines(s)
poems = file.readlines()
for i in range(len(poems)):
if len(poems[i]) > 20 and len(poems[i]) < 96:
file3.writelines(poems[i])
file.close()
file3.close()
# ^ 匹配字符串开头
#^在[ ]里面代表非的含义 [^-]* 代表前所有字符0个或者多个,非-的字符串。
# $ 匹配字符串的结尾。
# \b 匹配一个单词的边界。
# \d 匹配任意数字。
# \D 匹配任意非数字字符。
# \w 匹配字母、数字、下划线、汉字 等价于 '[^A-Za-z0-9_]'。
# \s 匹配任意的 空白符
# x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符)。
# x* 匹配 0次 、多次 x 字符。
# x+ 匹配 1次 、多次 x 字符。
# x{n,m} 匹配 x 字符,n<= 次数 <= m
# (a|b|c) 要么匹配 a,要么匹配 b,要么匹配 c。
# (x) 一般情况下表示一个记忆组 (remembered group)。
# 可以利用 re.search 函数返回对象的 groups() 函数获取它的值。
# 正则表达式中的点号通常意味着 “匹配任意单字符”
# . 匹配除换行符以外的任意字符
import re
num = re.findall('\d+',line) # 返回文本中的数字值
line="A1.45,b5,6.45,8.82"
num = re.findall(r"\d+\.?\d*",line)
print(num) # ['1.45', '5', '6.45', '8.82']
# re.sub(pattern, repl, string, count=0)
# pattern:表示正则表达式中的 模式字符串;
# repl:被替换的字符串(新)(既可以是字符串,也可以是函数);
# string:要被处理的(旧),要被替换的字符串;
# count:匹配的次数, 默认是全部替换
#过滤字符串中的英文与符号,保留汉字
import re
st = "hello,world!!%[545]你好234世界。。。"
ste = re.sub("[A-Za-z0-9\!\%\[\]\,\。]", "", st)
print(ste) # 你好世界
#从字符串中提取数字
totalCount = '100abc'
totalCount = re.sub("\D", "", totalCount)
print(totalCount) #100
#从字符串中提取字母字符串
import re
st = "hello,world!!%[545]你好234世界。。。"
result = ''.join(re.findall(r'[A-Za-z]', st))
print(result) # helloworld
# re.match 用法
email_list = ["xiaoWang@163.com", "xiaoWang@163.comheihei", "1comxiaowang@163.com","xiao.Wang@163.com"]
for email in email_list:
ret = re.match("[\w]*@163\.com$", email) #.代表只是一个点 $代表以xxx结尾的字符串
if ret:
print("%s Ture" % email)
else:
print("%s False" % email)
#xiaoWang@163.com Ture
#xiaoWang@163.comheihei False
#1comxiaowang@163.com Ture
#xiao.Wang@163.com False
ret = re.match("\w{4,20}@(163|126|qq|gmail)\.com", "test@gmail.com")
print(ret.group()) #test@gmail.com
个人平时学习时,记得笔记,只是最简单基础的知识,但很常用。希望能对你有帮助了。。。