python软件sort python sort - 电脑|办公 - 电脑办公-杀毒安全-网络-V3学习网
微商网
 
 
导航:首页 |电脑|办公|正文

python软件sort python sort

时间:2021-04-15 09:08:06
python,有一句排序的sort()代码没有执行。请教下是怎么回事?其实这个不难,以下代码做个参考吧。 -*-coding:utf-8-*-class Student(object): """ 自
作者:

python软件sort

python,有一句排序的sort()代码没有执行。

请教下是怎么回事?

其实这个不难,以下代码做个参考吧。

#-*-coding:utf-8-*-class Student(object): """ 自定义Student类 """ def __init__(self, name, score): # 初始化Student,参数name,score self.name = name self.score = score def __cmp__(self, other): # 重写比较方法,根据Student类属性score进行比较 return cmp(self.score, other.score) def show(self): return "name:"+self.name+"; score:"+str(self.score)def get_input(): name = raw_input("input name > ") if not name: # 当姓名输入为空时,返回None return (None,None) score = raw_input("input %s\"s score > " % name) if name and score: return (name,int(score)) # 为方便比较,将score强制转换为int型 else: return (None,None)def main(): s_list = [] while True: # 一直循环输入姓名及成绩 name,score = get_input() if name and score: s = Student(name, score) s_list.append(s) else: # 当输入姓名或成绩为空时跳出循环 break s_list.sort() # 对Student实体进行排序 for i,s in enumerate(s_list): # 遍历已经排序的实体列表,并进行显示 print " ".join([str(i+1), s.name, str(s.score)])if __name__ == "__main__": main()输入及输出结果如下,当然你也可以修改下 s_list 方便测试 input name > ainput a"s score > 97input name > binput b"s score > 95input name > cinput c"s score > 96input name > 1 b 952 c 963 a 97 注释已经比较详细了,应该能看懂。

何用shell或者python脚本格式化 json后缀名文件,并保存

1] 一共进行几轮列表比较,一共是(length-1)轮 for # 首先获取list的总长度;len(myList) #&nbsp,注意-i的意义(可以减少比较已经排好序的元素) for i in range(0, length -&nbspdef bubbleSort(myList); &nbsp,这里需要进行length-1-长的比较;myList[j] > myList[j + + 1] myList[j + 交换 print(item) print("============================="j in range(0, length -&nbsp: &nbsp,为之后的循环比较作准备 length = myList[j # 打印每一轮交换后的列表 i): # = myList[j] 1): # for item in myList; )print("Bubble Sort;每一轮的比较,注意range的变化; 1 - myList[j] = if 1]: tmp = tmp &nbsp: )myList =&nbsp: &quot...

今天终于明白了怎么利用c++的sort函数排序了

content_cutted.head()结果如下.3 2016 年 , 全峰 集团 持续 挖掘 大 数据 : object单词之间都已经被空格区分开了.2 国务院 总理 李克强 当地 时间 20 日 上午 在 纽约 下榻 饭店 同 美国 经济 。

这是因为我们需要提取每篇文章的关键词。

而中文本身并不使用空格在单词间划分。

此处我们采用“结巴分词”工具! 昨天 , Goo.4 贵州 理工学院 召开 大 数据分析 与 应用 专题 分享 会 借 “ 创响 中国 ” 贵,甚至连英文也不认识。

这一工具的具体介绍和其他用途请参见《如何用Python做中文分词?》一文。

我们首先调用jieba分词包, encoding="gb18030")我们来看看数据框的头几行,以确认读取是否正确。

df。

假如这里有两句话:I love the game.I hate the game.那么我们就可以抽取出以下特征,是把文章中的关键词转换为一个个特征(列),然后对每一篇文章数关键词出现个数.1 点击 上方 “ 硅谷 周边 ” 关注 我 , 收到 最新 的 文章 哦 ;T/] = df.content.apply(chinese_word_cut)执行过程中可能会出现如下提示。

没关系,忽略就好,因此我们需要把这项工作并行化。

这就需要首先编写一个函数,不是单一文本数据,而是1000多条文本数据,它只认得数字。

我们需要做的,处理单一文本的分词;folders/:(1024。

所以这里做了个限定。

下面我们需要做一项重要工作.cacheLoading model cost 0。

机器就能看懂它们了; ",max_df = 0.5,min_df = 10)tf = tf_vectorizer.fit_transform(df.content_cutted)到这里,似乎什么都没有发生。

因为我们没有要求程序做任何输出。

下面我们就要放出LDA这个大招了。

先引入软件包:from sklearn.decomposition import LatentDirichletAllocation然后我们需要人为设定主题的数量。

这个要求让很多人大跌眼镜——我怎么知道这一堆文章里面多少主题?!别着急。

应用LDA方法,指定(或者叫瞎猜)主题个数是必须的。

如果你只需要把文章粗略划分成几个大类,就可以把数字设定小一些;相反,如果你希望能够识别出非常细分的主题,就增大主题个数。

对划分的结果,如果你觉得不够满意,可以通过继续迭代,调整主题数量来优化。

这里我们先设定为5个分类试试。

n_topics = 5lda = LatentDirichletAllocation(n_topics=n_topics, max_iter=50,learning_method="online",learning_offset=50.,random_state=0)把我们的1000多篇向量化后的文章扔给LDA,让它欢快地找主题吧。

这一部分工作量较大,程序会执行一段时间,Jupyter Notebook在执行中可能暂时没有响应。

等待一会儿就好,不要着急。

lda.fit(tf)程序终于跑完了的时候,你会看到如下的提示信息:LatentDirichletAllocation(batch_size=128, doc_topic_prior=None,evaluate_every=-1, learning_decay=0.7,learning_method="online", learning_offset=50.0,max_doc_update_iter=100, max_iter=50, mean_change_tol=0.001,n_jobs=1, n_topics=5, perp_tol=0.1, random_state=0,topic_word_prior=None, total_samples=1000000.0, verbose=0)可是,这还是什么输出都没有啊。

它究竟找了什么样的主题?主题没有一个确定的名称,而是用一系列关键词刻画的。

我们定义以下的函数,把每个主题里面的前若干个关键词显示出来:def print_top_words(model, feature_names, n_top_words):for topic_idx, topic in enumerate(model.components_):print("Topic #%d:" % topic_idx)print(" ".join([feature_names[i] for i in topic.argsort()[:-n_top_words - 1:-1]]))print()定义好函数之后,我们暂定每个主题输出前20个关键词。

n_top_words = 20以下命令会帮助我们依次输出每个主题的关键词表:tf_feature_names = tf_vectorizer.get_feature_names()print_top_words(lda, tf_feature_names, n_top_words)执行效果如下:Topic #0:学习 模型 使用 算法 方法 机器 可视化 神经网络 特征 处理 计算 系统 不同 数据库 训练 分类 基于 工具 一种 深度Topic #1:这个 就是 可能 如果 他们 没有 自己 很多 什么 不是 但是 这样 因为 一些 时候 现在 用户 所以 非常 已经Topic #2:企业 平台 服务 管理 互联网 公司 行业 数据分析 业务 用户 产品 金融 创新 客户 实现 系统 能力 产业 工作 价值Topic #3:中国 2016 电子 增长 10 市场 城市 2015 关注 人口 检索 30 或者 其中 阅读 应当 美国 全国 同比 20Topic #4:人工智能 学习 领域 智能 机器人 机器 人类 公司 深度 研究 未来 识别 已经 医疗 系统 计算机 目前 语音 百度 方面()在这5个主题里,可以看出主题0主要关注的是数据科学中的算法和技术,而主题4显然更注重数据科学的应用场景。

剩下的几个主题可以如何归纳?作为思考题,留给你花时间想一想吧。

到这里,LDA已经成功帮我们完成了主题抽取。

但是我知道你不是很满意,因为结果不够直观。

那咱们就让它直观一些好了。

执行以下命令,会有有趣的事情发生。

import pyLDAvisimport pyLDAvis.sklearnpyLDAvis.enable_notebook()pyLDAvis.sklearn.prepare(lda, tf, tf_vectorizer)对,你会看到如下的一张图,而且还是可交互的动态图哦。

图的左侧,用圆圈代表不同的主题,圆圈的大小代表了每个主题分别包含文章的数量。

图的右侧,列出了最重要(频率最高)的30个...

python 冒泡排序怎么写不让最大的两个值相等

35; &nbsp, 18, 99; &nbsp,只需将n-1个数归位, 也就是说要进行n-1趟操作(已经归位的数不用再比较)#: 35!/usr/bin/env python# coding, 76, 76第三次比较: 35, 99, 18, 12, 76第四次比较,2; for i in range(len(nums)-1); &nbsp: &nbsp, 如果有n个数进行排序, 五个数中最小的数已经在最后面了, 接下来只比较前四个数, 依次类推第二趟99, 35, 76, 18, 12第三趟99, 18;if nums[j] > nums[j+1],6; &nbsp: &nbsp, 12, 99: &nbsp,8,1]print bubbleSort(nums)缺点: 冒泡排序解决了桶排序浪费空间的问题 冒泡排序的时间复杂度是O(N^2) 冒泡排序的思想, nums[j+1] = nums[j+1], nums[j] return nums nums = [5,2,45; for j in range(len(nums)-i-1): nums[j];# j为列表下标 # 这个循环负责设置冒泡排序进行的次数&nbsp, 76:utf-8def bubbleSort(nums), 12第四趟99, 76, 35, 18, 12比较完成冒泡排序原理: 每一趟只能将一个数归位, 12 经过第一趟比较后, 18: 35: 每次比较两个相邻的元素, 如果他们的顺序错误就把他们交换位置 比如有五个数: 12, 35, 99, 18, 76, 从大到小排序, 对相邻的两位进行比较 第一趟:第一次比较: 35, 12, 99, 18, 76第二次比较 ...

怎么使用Python中Pandas库Resample,实现重采样,完成线性插值

#python中的pandas库主要有DataFrame和Series类(面向对象的的语言更愿意叫类) DataFrame也就是#数据框(主要是借鉴R里面的data.frame),Series也就是序列 ,pandas底层是c写的 性能很棒,有大神#做过测试 处理亿级别的数据没问题,起性能可以跟同等配置的sas媲美#DataFrame索引 df.loc是标签选取操作,df.iloc是位置切片操作print(df[["row_names","Rape"]])df["行标签"]df.loc[行标签,列标签]print(df.loc[0:2,["Rape","Murder"]])df.iloc[行位置,列位置]df.iloc[1,1]#选取第二行,第二列的值,返回的为单个值df.iloc[0,2],:]#选取第一行及第三行的数据df.iloc[0:2,:]#选取第一行到第三行(不包含)的数据df.iloc[:,1]#选取所有记录的第一列的值,返回的为一个Seriesdf.iloc[1,:]#选取第一行数据,返回的为一个Seriesprint(df.ix[1,1]) # 更广义的切片方式是使用.ix,它自动根据你给到的索引类型判断是使用位置还是标签进行切片print(df.ix[0:2])#DataFrame根据条件选取子集 类似于sas里面if、where ,R里面的subset之类的函数df[df.Murder>13]df[(df.Murder>10)&(df.Rape>30)]df[df.sex==u"男"]#重命名 相当于sas里面的rename R软件中reshape包的中的renamedf.rename(columns={"A":"A_rename"}) df.rename(index={1:"other"})#删除列 相当于sas中的drop R软件中的test["col"]df.drop(["a","b"],axis=1) or del df[["a","b"]]#排序 相当于sas里面的sort R软件里面的df[order(x),]df.sort(columns="C") #行排序 y轴上df.sort(axis=1) #各个列之间位置排序 x轴上#数据描述 相当于sas中proc menas R软件里面的summarydf.describe()#生成新的一列 跟R里面有点类似df["new_columns"]=df["columns"]df.insert(1,"new_columns",df["B"]) #效率最高df.join(Series(df["columns"],name="new_columns"))#列上面的追加 相当于sas中的append R里面cbind()df.append(df1,ignore_index=True)pd.concat([df,df1],ignore_index=True)#最经典的join 跟sas和R里面的merge类似 跟sql里面的各种join对照merge()#删除重行 跟sas里面nodukey R里面的which(!duplicated(df[])类似df.drop_duplicated()#获取最大值 最小值的位置 有点类似矩阵里面的方法df.idxmin(axis=0 ) df.idxmax(axis=1) 0和1有什么不同 自己摸索去#读取外部数据跟sas的proc import R里面的read.csv等类似read_excel() read_csv() read_hdf5() 等与之相反的是df.to_excel() df.to_ecv()#缺失值处理 个人觉得pandas中缺失值处理比sas和R方便多了df.fillna(9999) #用9999填充 #链接数据库 不多说 pandas里面主要用 MySQLdbimport MySQLdbconn=MySQLdb.connect(host="localhost",user="root",passwd="",db="mysql",use_unicode=True,charset="utf8")read_sql() #很经典#写数据进数据库df.to_sql("hbase_visit",con, flavor="mysql", if_exists="replace", index=False)#groupby 跟sas里面的中的by R软件中dplyr包中的group_by sql里面的group by功能是一样的 这里不多说#求哑变量 dumiper=pd.get_dummies(df["key"])df["key"].join(dumpier)#透视表 和交叉表 跟sas里面的proc freq步类似 R里面的aggrate和cast函数类似pd.pivot_table()pd.crosstab()#聚合函数经常跟group by一起组合用df.groupby("sex").agg({"height":["mean","sum"],"weight":["count","min"]}) #数据查询过滤test.query("0.2将STK_ID中的值过滤出来stk_list = ["600809","600141","600329"]中的全部记录过滤出来,命令是:rpt[rpt["STK_ID"].isin(stk_list)].将dataframe中,某列进行清洗的命令删除换行符:misc["product_desc"] = misc["product_desc"].str.replace("\n", "")删除字符串前后空格:df["Make"] = df["Make"].map(str.strip)如果用模糊匹配的话,命令是:rpt[rpt["STK_ID"].str.contains(r"^600[0-9]{3}$")]对dataframe中元素,进行类型转换df["2nd"] = df["2nd"].str.replace(",","").astype(int) df["CTR"] = df["CTR"].str.replace("%","").astype(np.float64)#时间变换 主要依赖于datemie 和time两个包http://www.2cto.com/kf/201401/276088.html#其他的一些技巧df2[df2["A"].map(lambda x:x.startswith("61"))] #筛选出以61开头的数据df2["Author"].str.replace("", "").head() #replace("", "")表示将字符串中以””结束的任意子串替换为空字符串commits = df2["Name"].head(15)print commits.unique(), len(commits.unique()) #获的NAME的不同个数,类似于sql里面count(distinct name)#pandas中最核心 最经典的函数apply map applymap

为什么在Python的函数中,代码运行速度更快

Julia 与 Python 的比较 我是否应丢弃 Python 和其他语言,使用 Julia 执行技术计算?在看到 上的基准测试后,人们一定会这么想。

Python 和其他高级语言在速度上远远有些落后。

但是,我想到的第一个问题有所不同:Julia 团队能否以最适合 Python 的方式编写 Python 基准测试?我对这种跨语言比较的观点是,应该根据要执行的任务来定义基准测试,然后由语言专家编写执行这些任务的最佳代码。

如果代码全由一个语言团队编写,则存在其他语言未得到最佳使用的风险。

Julia 团队有一件事做得对,那就是他们将他们使用的代码发布到了 github 上。

具体地讲,Python 代码可在此处找到。

第一眼看到该代码,就可以证实我所害怕的偏见。

该代码是以 C 风格编写的,在数组和列表上大量使用了循环。

这不是使用 Python 的最佳方式。

我不会责怪 Julia 团队,因为我很内疚自己也有同样的偏见。

但我受到了残酷的教训:付出任何代价都要避免数组或列表上的循环,因为它们确实会拖慢 Python 中的速度,请参阅 Python 不是 C。

考虑到对 C 风格的这种偏见,一个有趣的问题(至少对我而言)是,我们能否改进这些基准测试,更好地使用 Python 及其工具?在我给出答案之前,我想说我绝不会试图贬低 Julia。

在进一步开发和改进后,Julia 无疑是一种值得关注的语言。

我只是想分析 Python 方面的事情。

实际上,我正在以此为借口来探索各种可用于让代码更快运行的 Python 工具。

在下面的内容中,我使用 Docker 镜像在 Jupyter Notebook 中使用 Python 3.4.3,其中已安装了所有的 Python 科学工具组合。

我还会通过 Windows 机器上的 Python 2.7.10,使用 Anaconda 来运行代码。

计时是对 Python 3.4.3 执行的。

包含下面的所有基准测试的完整代码的 Notebook 可在此处找到。

鉴于各种社交媒体上的评论,我添加了这样一句话:我没有在这里使用 Python 的替代性实现。

我没有编写任何 C 代码:如果您不信,可试试寻找分号。

本文中使用的所有工具都是 Anaconda 或其他发行版中提供的标准的 Cython 实现。

下面的所有代码都在单个 Notebook中运行。

我尝试过使用来自 github 的 Julia 微性能文件,但不能使用 Julia 0.4.2 原封不动地运行它。

我必须编辑它并将 @timeit 替换为 @time,它才能运行。

在对它们计时之前,我还必须添加对计时函数的调用,否则编译时间也将包含在内。

我使用的文件位于此处。

我在用于运行 Python 的同一个机器上使用 Julia 命令行接口运行它。

回页首 计时代码 Julia 团队使用的第一项基准测试是 Fibonacci 函数的一段简单编码。

def fib(n):if nreturn n return fib(n-1)+fib(n-2) 此函数的值随 n 的增加而快速增加,例如:fib(100) = 354224848179261915075 可以注意到,Python 任意精度 (arbitrary precision) 很方便。

在 C 等语言中编写相同的函数需要花一些编码工作来避免整数溢出。

在 Julia 中,需要使用 BigInt 类型。

所有 Julia 基准测试都与运行时间有关。

这是 Julia 中使用和不使用 BigInt 的计时:0.000080 seconds (149 allocations:10.167 KB)0.012717 seconds (262.69 k allocations:4.342 MB) 在 Python Notebook 中获得运行时间的一种方式是使用神奇的 %timeit。

例如,在一个新单元中键入:%timeit fib(20) 执行它会获得输出:100 loops, best of 3:3.33 ms per loop 这意味着计时器执行了以下操作:运行 fib(20) 100 次,存储总运行时间 运行 fib(20) 100 次,存储总运行时间 运行 fib(20) 100 次,存储总运行时间 从 3 次运行中获取最小的运行时间,将它除以 100,然后输出结果,该结果就是 fib(20) 的最佳运行时间 这些循环的大小(100 次和 3 次)会由计时器自动调整。

可能会根据被计时的代码的运行速度来更改循环大小。

Python 计时与使用了 BigInt 时的 Julia 计时相比出色得多:3 毫秒与 12 毫秒。

在使用任意精度时,Python 的速度是 Julia 的 4 倍。

但是,Python 比 Julia 默认的 64 位整数要慢。

我们看看如何在 Python 中强制使用 64 位整数。

回页首 使用 Cython 编译 一种编译方式是使用 Cython 编译器。

这个编译器是使用 Python 编写的。

它可以通过以下命令安装:pip install Cython 如果使用 Anaconda,安装会有所不同。

因为安装有点复杂,所以我编写了一篇相关的博客文章:将 Cython For Anaconda 安装在 Windows 上 安装后,我们使用神奇的 %load_ext 将 Cython 加载到 Notebook 中:%load_ext Cython 然后就可以在我们的 Notebook 中编译代码。

我们只需要将想要编译的代码放在一个单元中,包括所需的导入语句,使用神奇的 %%cython 启动该单元:%%cython def fib_cython(n):if nreturn n return fib_cython(n-1)+fib_cython(n-2) 执行该单元会无缝地编译这段代码。

我们为该函数使用一个稍微不同的名称,以反映出它是使用 Cython 编译的。

当然,一般不需要这么做。

我们可以将之前的函数替换为相同名称的已编译函数。

对它计时会得到:1000 loops, best of 3:1.22 ms per loop 哇,几乎比最初的 Python 代码快 3 倍!我们现在比使用 BigInt 的 Julia 快 100 倍。

我们还可以尝试静态类型。

使用关键字 cpdef 而不是 def 来声明该函数。

它使我们能够使用相应的 C 类...

大家还关注
    
阅读排行
推荐阅读