首页技术python replace函数怎么用,python replace函数用法

python replace函数怎么用,python replace函数用法

编程之家2026-06-11907次浏览

各位老铁们好,相信很多人对python replace函数怎么用都不是特别的了解,因此呢,今天就来为大家分享下关于python replace函数怎么用以及python replace函数用法的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

python replace函数怎么用,python replace函数用法

python内置函数

8个超好用的内置函数set()、eval()、sorted()、reversed()、map()、reduce()、filter()、enumerate()。

1、set()

当需要对一个列表进行去重操作的时候,set()函数就派上用场了。

用于创建一个集合,集合里的元素是无序且不重复的。集合对象创建后,还能使用并集、交集、差集功能。

2、eval()

之前有人问如何用Python写一个四则运算器,输入字符串公式,直接产生结果。用eval()来做就很简单:eval(str_expression)作用是将字符串转换成表达式,并且执行。

python replace函数怎么用,python replace函数用法

3、sorted()

在处理数据过程中,我们经常会用到排序操作,比如将列表、字典、元组里面的元素正/倒排序。这时候就需要用到sorted(),它可以对任何可迭代对象进行排序,并返回列表。

4、reversed()

如果需要对序列的元素进行反转操作,reversed()函数能帮到你。reversed()接受一个序列,将序列里的元素反转,并最终返回迭代器。

5、map()

做文本处理的时候,假如要对序列里的每个单词进行大写转化操作。这个时候就可以使用map()函数。

python replace函数怎么用,python replace函数用法

map()会根据提供的函数,对指定的序列做映射,最终返回迭代器。也就是说map()函数会把序列里的每一个元素用指定的方法加工一遍,最终返回给你加工好的序列。比如:对列表里的每个数字作平方处理。

6、reduce()

前面说到对列表里的每个数字作平方处理,用map()函数。那我想将列表里的每个元素相乘,该怎么做呢?这时候用到reduce()函数。

reduce()会对参数序列中元素进行累积。第一、第二个元素先进行函数操作,生成的结果再和第三个元素进行函数操作,以此类推,最终生成所有元素累积运算的结果。

你可能已经注意到,reduce()函数在Python3里已经不再是内置函数,而是迁移到了functools模块中,这说明reduce()函数太重要了!

7、filter()

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list()来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True或 False,最后将返回 True

的元素放到新列表中。

8、enumerate()

enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for

循环当中。

python gensim怎么用word2vect

词向量(word2vec)原始的代码是C写的,python也有对应的版本,被集成在一个非常牛逼的框架gensim中。

我在自己的开源语义网络项目graph-mind(其实是我自己写的小玩具)中使用了这些功能,大家可以直接用我在上面做的进一步的封装傻瓜式地完成一些操作,下面分享调用方法和一些code上的心得。

1.一些类成员变量:

[python]view plaincopy

def__init__(self,modelPath,_size=100,_window=5,_minCount=1,_workers=multiprocessing.cpu_count()):

self.modelPath=modelPath

self._size=_size

self._window=_window

self._minCount=_minCount

self._workers=_workers

modelPath是word2vec训练模型的磁盘存储文件(model在内存中总是不踏实),_size是词向量的维度,_window是词向量训练时的上下文扫描窗口大小,后面那个不知道,按默认来,_workers是训练的进程数(需要更精准的解释,请指正),默认是当前运行机器的处理器核数。这些参数先记住就可以了。

2.初始化并首次训练word2vec模型

完成这个功能的核心函数是initTrainWord2VecModel,传入两个参数:corpusFilePath和safe_model,分别代表训练语料的路径和是否选择“安全模式”进行初次训练。关于这个“安全模式”后面会讲,先看代码:

[python]view plaincopy

definitTrainWord2VecModel(self,corpusFilePath,safe_model=False):

'''''

initandtrainaneww2vmodel

(corpusFilePathcanbeapathofcorpusfileordirectoryorafiledirectly,insometimeitcanbesentencesdirectly

aboutsoft_model:

ifsafe_modelistrue,theprocessoftrainingusesupdatewaytorefreshmodel,

andthiscankeeptheusageofos'smemorysafebutslowly.

andifsafe_modelisfalse,theprocessoftrainingusesthewaythatloadall

corpuslinesintoasentenceslistandtrainthemonetime.)

'''

extraSegOpt().reLoadEncoding()

fileType=localFileOptUnit.checkFileState(corpusFilePath)

iffileType==u'error':

warnings.warn('loadfileerror!')

returnNone

else:

model=None

iffileType==u'opened':

print('trainingmodelfromsingleFile!')

model=Word2Vec(LineSentence(corpusFilePath),size=self._size,window=self._window,min_count=self._minCount,workers=self._workers)

eliffileType==u'file':

corpusFile=open(corpusFilePath,u'r')

print('trainingmodelfromsingleFile!')

model=Word2Vec(LineSentence(corpusFile),size=self._size,window=self._window,min_count=self._minCount,workers=self._workers)

eliffileType==u'directory':

corpusFiles=localFileOptUnit.listAllFileInDirectory(corpusFilePath)

print('trainingmodelfromlistFilesofdirectory!')

ifsafe_model==True:

model=Word2Vec(LineSentence(corpusFiles[0]),size=self._size,window=self._window,min_count=self._minCount,workers=self._workers)

forfileincorpusFiles[1:len(corpusFiles)]:

model=self.updateW2VModelUnit(model,file)

else:

sentences=self.loadSetencesFromFiles(corpusFiles)

model=Word2Vec(sentences,size=self._size,window=self._window,min_count=self._minCount,workers=self._workers)

eliffileType==u'other':

#TODOaddsentenceslistdirectly

pass

model.save(self.modelPath)

model.init_sims()

print('producingword2vecmodel...ok!')

returnmodel

首先是一些杂七杂八的,判断一下输入文件路径下访问结果的类型,根据不同的类型做出不同的文件处理反应,这个大家应该能看懂,以corpusFilePath为一个已经打开的file对象为例,创建word2vec model的代码为:

[python]view plaincopy

model=Word2Vec(LineSentence(corpusFilePath),size=self._size,window=self._window,min_count=self._minCount,workers=self._workers)

其实就是这么简单,但是为了代码健壮一些,就变成了上面那么长。问题是在面对一个路径下的许多训练文档且数目巨大的时候,一次性载入内存可能不太靠谱了(没有细研究gensim在Word2Vec构造方法中有没有考虑这个问题,只是一种习惯性的警惕),于是我设定了一个参数safe_model用于判断初始训练是否开启“安全模式”,所谓安全模式,就是最初只载入一篇语料的内容,后面的初始训练文档通过增量式学习的方式,更新到原先的model中。

上面的代码里,corpusFilePath可以传入一个已经打开的file对象,或是一个单个文件的地址,或一个文件夹的路径,通过函数checkFileState已经做了类型的判断。另外一个函数是updateW2VModelUnit,用于增量式训练更新w2v的model,下面会具体介绍。loadSetencesFromFiles函数用于载入一个文件夹中全部语料的所有句子,这个在源代码里有,很简单,哥就不多说了。

3.增量式训练更新word2vec模型

增量式训练w2v模型,上面提到了一个这么做的原因:避免把全部的训练语料一次性载入到内存中。另一个原因是为了应对语料随时增加的情况。gensim当然给出了这样的solution,调用如下:

[python]view plaincopy

defupdateW2VModelUnit(self,model,corpusSingleFilePath):

'''''

(onlycanbeasingleFile)

'''

fileType=localFileOptUnit.checkFileState(corpusSingleFilePath)

iffileType==u'directory':

warnings.warn('cannotdealadirectory!')

returnmodel

iffileType==u'opened':

trainedWordCount=model.train(LineSentence(corpusSingleFilePath))

print('updatemodel,updatewordsnumis:'+trainedWordCount)

eliffileType==u'file':

corpusSingleFile=open(corpusSingleFilePath,u'r')

trainedWordCount=model.train(LineSentence(corpusSingleFile))

print('updatemodel,updatewordsnumis:'+trainedWordCount)

else:

#TODOaddsentenceslistdirectly(sameaslastfunction)

pass

returnmodel

简单检查文件type之后,调用model对象的train方法就可以实现对model的更新,这个方法传入的是新语料的sentences,会返回模型中新增词汇的数量。函数全部执行完后,return更新后的model,源代码中在这个函数下面有能够处理多类文件参数(同2)的增强方法,这里就不多介绍了。

4.各种基础查询

当你确定model已经训练完成,不会再更新的时候,可以对model进行锁定,并且据说是预载了相似度矩阵能够提高后面的查询速度,但是你的model从此以后就read only了。

[python]view plaincopy

deffinishTrainModel(self,modelFilePath=None):

'''''

warning:afterthis,themodelisread-only(can'tbeupdate)

'''

ifmodelFilePath==None:

modelFilePath=self.modelPath

model=self.loadModelfromFile(modelFilePath)

model.init_sims(replace=True)

可以看到,所谓的锁定模型方法,就是init_sims,并且把里面的replace参数设定为True。

然后是一些word2vec模型的查询方法:

[python]view plaincopy

defgetWordVec(self,model,wordStr):

'''''

gettheword'svectorasarrayListtypefromw2vmodel

'''

returnmodel[wordStr]

[python]view plaincopy

defqueryMostSimilarWordVec(self,model,wordStr,topN=20):

'''''

MSimilarwordsbasicqueryfunction

return2-dimList[0]isword[1]isdouble-prob

'''

similarPairList=model.most_similar(wordStr.decode('utf-8'),topn=topN)

returnsimilarPairList

[python]view plaincopy

defculSimBtwWordVecs(self,model,wordStr1,wordStr2):

'''''

twowordssimilarbasicqueryfunction

returndouble-prob

'''

similarValue=model.similarity(wordStr1.decode('utf-8'),wordStr2.decode('utf-8'))

returnsimilarValue

上述方法都很简单,基本上一行解决,在源代码中,各个函数下面依然是配套了相应的model文件处理版的函数。其中,getWordVec是得到查询词的word2vec词向量本身,打印出来是一个纯数字的array;queryMostSimilarWordVec是得到与查询词关联度最高的N个词以及对应的相似度,返回是一个二维list(注释里面写的蛮清楚);culSimBtwWordVecs是得到两个给定词的相似度值,直接返回double值。

5.Word2Vec词向量的计算

研究过w2v理论的童鞋肯定知道词向量是可以做加减计算的,基于这个性质,gensim给出了相应的方法,调用如下:

[python]view plaincopy

defqueryMSimilarVecswithPosNeg(self,model,posWordStrList,negWordStrList,topN=20):

'''''

pos-negMSimilarwordsbasicqueryfunction

return2-dimList[0]isword[1]isdouble-prob

'''

posWordList=[]

negWordList=[]

forwordStrinposWordStrList:

posWordList.append(wordStr.decode('utf-8'))

forwordStrinnegWordStrList:

negWordList.append(wordStr.decode('utf-8'))

pnSimilarPairList=model.most_similar(positive=posWordList,negative=negWordList,topn=topN)

returnpnSimilarPairList

由于用的是py27,所以之前对传入的词列表数据进行编码过滤,这里面posWordList可以认为是对结果产生正能量的词集,negWordList则是对结果产生负能量的词集,同时送入most_similar方法,在设定return答案的topN,得到的返回结果形式同4中的queryMostSimilarWordVec函数,大家可以这样数学地理解这个操作:

下面一个操作是我自创的,假设我想用上面词向量topN“词-关联度”的形式展现两个词或两组词之间的关联,我是这么做的:

[python]view plaincopy

defcopeMSimilarVecsbtwWordLists(self,model,wordStrList1,wordStrList2,topN_rev=20,topN=20):

'''''

rangewordvecresfortwowordListfromsourcetotarget

usewordVectortoexpresstherelationshipbetweensrc-wordListandtag-wordList

first,usethetag-wordListasneg-wordListtogettherev-wordList,

thenusethescr-wordListandtherev-wordListasthenewsrc-tag-wordList

topN_revistopNofrev-wordListandtopNisthefinaltopNofrelationshipvec

'''

srcWordList=[]

tagWordList=[]

srcWordList.extend(wordStr.decode('utf-8')forwordStrinwordStrList1)

tagWordList.extend(wordStr.decode('utf-8')forwordStrinwordStrList2)

revSimilarPairList=self.queryMSimilarVecswithPosNeg(model,[],tagWordList,topN_rev)

revWordList=[]

revWordList.extend(pair[0].decode('utf-8')forpairinrevSimilarPairList)

stSimilarPairList=self.queryMSimilarVecswithPosNeg(model,srcWordList,revWordList,topN)

returnstSimilarPairList

这个操作的思路就是,首先用两组词中的一组作为negWordList,传入上面的queryMSimilarVecswithPosNeg函数,得到topN一组的中转词,在使用这些中转词与原先的另一组词进行queryMSimilarVecswithPosNeg操作,很容易理解,第一步得到的是一组词作为negWordList的反向结果,再通过这个反向结果与另一组词得到“负负得正”的效果。这样就可以通过一组topN的“词-关联度”配对List表示两组词之间的关系。

学python别说还不会用这些快捷键了

学python别说还不会用这些快捷键了

ー、编辑(Editing)

1.Ctr+Space基本的代码完成(类、方法、属性)。

2.Ctrl+Alt+Space快速导入任意类。

3.Ctrl+Shift+Enter语句完成。

4.Ctrl+P参数信息(在方法中调用参数)。

5.Ctrl+Q快速查看文档。

6.F1外部文档。

7.Shift+F1外部文档。进入web文档主页。

8.ctrl+Shift+Z->Redo重做。

9.Ct+悬浮单击鼠标左键简介进入代码定义。

10.Ctl+F1显示错误描述或警告信息。

11.AIt+Insert自动生成代码。

12.Ctrl+0重新方法。

13.Ctrl+AIt+T选中。

14.Ct+行注释取消行注释。

15.Ctrl+Shift+/块注释。

16.Ctrl+Shift+1查看快速定义。

17.Ctrl+Shift+B跳转到类型声明。

18.Ctl+U跳转到父方法、父类。

19.Ctrl+]爪跳转到代码块结束、开始。

20.Ctrl+F12弹出文件结构。

21.Ctrl+H类型层次结构。

22.Ctrl+Shift+H方法层次结构。

23.Ctrl+AIt+H调用层次结构。

24.F2/Shift+F2下一条、前一条高亮的错误。

25.F4/Ctrl+Enter编辑资源、查看资源。

26.AIt+Home显示导航条F11书签开关。

27.Ctrl+Shift+F11书签助记开关。

28.Ctrl+#[0-9]跳转到标识的书签。

29.Shift+F11显示书签AIt+Tab切换窗口。

30.Ctrl+Shift+J添加智能线。

31.Ctrl+Enter智能线切割。

32.Shift+Enter另起一行。

33.Ctrl+Shift+U在选定的区域或代码块间切换。

34.Ctrl+Delete删除到字符结束。

35.Ctrl+Backspace删除到字符开始。

36.Ctrl+Numpad+展开/折叠代码块〔当前位置的:函数,注释等)。

37.Ctrl+shift+Numpad.+/展开折叠所有代码块。

38.Ctr+F4关闭运行的选项卡。

39.默认是选中+ctrlcommand+shift+u转换字母大小写。

二、查找替换(Search/Replace)

1.F3下一个。

2.Shift+F3前一个。

3.Ctrl+R替换。

4.Ctrl+Shif+F或者连续2次敲击shift全局查找何以在整个项目中查我煤个字符痒什么的,如查找某个函数名字符串看之前是怎么使用这个函数的。

5.Ctrl+Shift+R全局替换。

三、运行(Running)

1.Alt+Shift+F10运行模式配置。

2.Alt+Shift+F9调试模式配置。

3.Shift+F1O运行。

4.Shift+F9调试。

5.Ctrl+Shift+F10运行编辑器配置。

6.Ctrl+Alt+R运行manage.py任务。

四、调试(Debugging)

1.F8跳过。

2.F7进入。

3.Shift-+F8退出。

4.Alt+F9运行游标。

5.At+F8验证表达式。

6.Ctrl+Alt+F8快速验证表达式。

7.F9恢复程序。

8.Ctrl+F8断点开关。

9.Ctrl+Shift+-F8查看断点。

五、导航(Navigation)

1.Ctrl+N跳转到类。

2.Ctrl+Shift+N跳转到符号。

3.Alt+Right/儿eft跳转到下一个、前一个编辑的选项卡,代码文件(cmd+alt+right/left mac)。

4.AIt+Up/Down跳转到上一个、下一个方法。

5.F12回到先前的工具窗口。

6.Esc从工具窗口回到编辑窗回。

7.Shift+Esc隐藏运行的、最近运行的窗。

8.Ctrl+Shift+F4关闭主动运行的选项卡。

9.Ctrl+G查看当前行号、字符号。

10.Ctrl+E当前文件弹出,打开最近使用的文件列表。

11.Ctrl+AIt+Left/Right.后退、前进。

12.Ctrl+Shift+Backspace导航到最近编辑区域,差不多就是返回上次编辑的位置。

13.At+F1查找挡前文件或标识。

14.Ctrl+B/Ctrl+Click跳转到声明。

15.Ctr+AIt+B跳转到实现。

16.Ctrl+W选中增加的代码块。

17.Ctrl+Shift+W回到之前状态。

18.Ctrl+Shift+][选定代码块结束、开始。

19.Alt+Enter快速修正。

20.Ctr+AIt+L代码格式化。

21.Ctrl+At+0优化导入。

22.Ctrl+AIt+1自动缩进。

23.Tab/Shift+Tab缩进、不缩进当前行。

24.Ctrl+X/Shift+-Delete剪切当前行或选定的代码块到剪贴板。

25.Ctrl+C/Ctrl+Insert,复制当前行或选定的代码块到剪贴板。

26.Ctrl+V/Shift+Insert从剪贴板粘贴。

27.Ctrl+Shift+V从最近的缓冲区粘贴。

28.Ctrl+D复制选定的区域或行。

29.Ctr+Y删除选定的行。

好了,文章到此结束,希望可以帮助到大家。

dnf最强职业?dnf最强角色排名什么叫ai拍照?ai拍照功能是什么手机拍照ai功能是什么