Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)


Posted in Python onMarch 20, 2017

通常测试人员或公司实习人员需要处理一些txt文本内容,而此时使用Python是比较方便的语言。它不光在爬取网上资料上方便,还在NLP自然语言处理方面拥有独到的优势。这篇文章主要简单的介绍使用Python处理txt汉字文字、二维列表排序和获取list下标。希望文章对你有所帮助或提供一些见解~

一. list二维数组排序

功能:已经通过Python从维基百科中获取了国家的国土面积和排名信息,此时需要获取国土面积并进行排序判断世界排名是否正确。

Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)

列表基础知识

列表类型同字符串一样也是序列式的数据类型,可以通过下标或切片操作来访问某一个或某一块连续的元素。它和字符串不同之处在于:字符串只能由字符组成而且不可变的(不能单独改变它的某个值),而列表是能保留任意数目的Python对象灵活容器。

总之,列表可以包含不同类型的对象(包括用户自定义的对象)作为元素,列表可以添加或删除元素,也可以合并或拆分列表,包括insert、update、remove、sprt、reverse等操作。

列表排序介绍

常用列表排序方法包括使用List内建函数list.sort()或序列类型函数sorted(list)排序

#list.sort(func=None, key=None, reverse=False) 
list = [4, 3, 9, 1, 5, 2] 
print list 
list.sort() 
print list 
#输出 
[4, 3, 9, 1, 5, 2] 
[1, 2, 3, 4, 5, 9]

通过对比下面的代码,可以发现两种方法的区别是:list.sort()改变了原list的顺序,而sorted没有。

#sorted(list) 
list = ['h', 'a', 'p', 'd', 'i', 'b'] 
print list 
print sorted(list) 
print list 
#输出 
['h', 'a', 'p', 'd', 'i', 'b'] 
['a', 'b', 'd', 'h', 'i', 'p'] 
['h', 'a', 'p', 'd', 'i', 'b']

二维列表排序

通过lambda表达式实现二维列表排序,并且按照第二个关键字进行排序。参考文章

#list.sort(func=None, key=None, reverse=False) 
list = [('Tom',4),('Jack',7),('Daly',9),('Mary',1),('God',5),('Yuri',3)] 
print list 
list.sort(lambda x,y:cmp(x[1],y[1])) 
print list 
#输出 
[('Tom', 4), ('Jack', 7), ('Daly', 9), ('Mary', 1), ('God', 5), ('Yuri', 3)] 
[('Mary', 1), ('Yuri', 3), ('Tom', 4), ('God', 5), ('Jack', 7), ('Daly', 9)]

题目中如果第一个数存储文件中读取的行号,第二个数存储人口数量,此时可对第二个数进行排序。需要注意的是它们一组(1,93)是tuple元组。

#list.sort(func=None, key=None, reverse=False) 
list = [(1,93),(2,71),(3,89),(4,93),(5,85),(6,77)] 
print list 
list.sort(key=lambda x:x[1]) 
print list 
#输出 
[(1, 93), (2, 71), (3, 89), (4, 93), (5, 85), (6, 77)] 
[(2, 71), (6, 77), (5, 85), (3, 89), (1, 93), (4, 93)]

lambada表达式

在上述代码中,如果还不知道lambada是什么鬼东西的话?那我就来帮你回顾了。

python允许使用lambda关键字创造匿名函数,它不需要以标准的方式来声明,如def语句。然而作为函数,它们也能有参数。

lambda就是一个表达式,而不是一个代码块。而且这个表达是的定义必须和声明放在同一行,能在lambda中封装有限的逻辑进去,起到一个函数速写的作用。例如:

#lambda [arg1[, arg2, ..., argN]]:expression 
f = lambda x,y,z:x+y+z 
num = f(1,2,3) 
print 'lambda: ' + str(num) 
#等价于 
def add(x,y,z): 
 return x+y+z 
num = add(1,2,3) 
print 'function: ' + str(num) 
#输出 
lambda: 6 
function: 6

二. 处理txt文本

下面是通过txt文件按行读取,并获取面积进行排序。其中核心代码如下:

读取文件&列表添加

source = open("F:\\Student\\1Area.txt",'r') 
lines = source.readlines() 
L = [] #列表二维 国家行数 人口数 
count = 1 #当前国家在文件中第count行 
for line in lines: 
 line = line.rstrip('\n') #去除换行 
 .... #获取排名和面积 
 fNum = string.atof(number) #面积 
 L.append((count,ffNum)) #列表添加 
 count = count + 1 
else: 
 print 'End While' 
 source.close()

列表排序

L.sort(lambda x,y:cmp(x[1],y[1]),reverse = True) 
#遍历过程 表示第i名 (文件第x行,面积y平方公里) 
#重点 L[i]输出列表 1 (46, 17075200.0) L[i][0]表示元组tuple第一个数 1 46 
for i in range(len(L)): 
 print (i+1), L[i]

获取面积字符串

line = line.rstrip('\n') #去除换行 
start = line.find(r'V:') 
end = line.find(r'平方公里') 
number = line[start+2:end] 
number = number.replace(',','') #去除',' 
#输出 
line => C:国家 E:中华人民共和国 A:国土面积 V:9,634,057或9,736,000平方公里(世界第3/4名) 
number => 9634057或9736000

最后同时需要处理各种字符串情况,如‘或'、‘万'要乘10000、删除‘[1]'等。更简单的方法是通过正则表达式或获取第一个非数字字符。

运行结果如下所示,排序后的txt和纠错txt:

Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)

Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)

代码如下:

# coding=utf-8 
import time 
import re 
import os 
import string 
import sys 
 
source = open("F:\\Student\\1Area.txt",'r') 
lines = source.readlines() 
count = 1 
L = [] #列表二维 国家行数 人口数 
 
''''' 
第一部分 获取国土面积 
''' 
print 'Start!!!' 
for line in lines: 
 line = line.rstrip('\n') #去除换行 
 start = line.find(r'V:') 
 end = line.find(r'平方公里') 
 number = line[start+2:end] 
 number = number.replace(',','') #去除',' 
 fNum = 0.0 
 if '万' in number: 
 end = line.find(r'万') 
 newNum = line[start+2:end] 
 fNum = string.atof(newNum)*10000 
 else: #如何优化代码 全局变量 
 if '/' in number: 
 end = line.find(r'/') 
 newNum = line[start+2:end] 
 newNum = newNum.replace(',','') 
 fNum = string.atof(newNum) 
 elif '(' in number: 
 end = line.find(r'(') 
 newNum = line[start+2:end] 
 newNum = newNum.replace(',','') 
 fNum = string.atof(newNum) 
 elif '[' in number: 
 end = line.find(r'[') 
 newNum = line[start+2:end] 
 newNum = newNum.replace(',','') 
 fNum = string.atof(newNum) 
 elif '或' in number: 
 end = line.find(r'或') 
 newNum = line[start+2:end] 
 newNum = newNum.replace(',','') 
 fNum = string.atof(newNum) 
 elif ' ' in number: 
 end = line.find(r' ') 
 newNum = line[start+2:end] 
 newNum = newNum.replace(',','') 
 fNum = string.atof(newNum) 
 else: 
 fNum = string.atof(number) 
 #print line 
 #print number 
 #print fNum 
 L.append((count,fNum)) 
 count = count + 1 
else: 
 print 'End While' 
 source.close() 
 
''''' 
第二部分 从大到小排序 
参看 http://blog.chinaunix.net/uid-20775448-id-4222915.html 
''' 
L.sort(lambda x,y:cmp(x[1],y[1]),reverse = True) 
#print L 
#遍历过程 表示第i名 (文件第x行,面积y平方公里) 
#重点 L[i]输出列表 1 (46, 17075200.0) L[i][0]表示元组tuple第一个数 1 46 
for i in range(len(L)): 
 print (i+1), L[i] 
 
''''' 
第三部分 读写文件 
''' 
source = open("F:\\Student\\1Area.txt",'r') 
lines = source.readlines() 
result = open("F:\\Student\\1NewArea.txt",'w') 
count = 1 
for line in lines: 
 line = line.rstrip('\n') 
 #获取列表L中排名位置pm 
 pm = 0 
 for i in range(len(L)): 
 if count==L[i][0]: 
 pm = i+1 
 break 
 #获取文件中名次 
 if '世界第' in line: 
 start = line.find(r'世界第') 
 end = line.find(r'名') 
 number = line[start+9:end] 
 if '/' in number: #防止中国第3/4名 
 end = line.find(r'/') 
 number = line[start+9:end] 
 if '包括海外' in number: 
 number = '41' 
 print number,pm,type(number),type(pm) 
 
 if string.atoi(number)==pm: 
 line = line + ' 【排名正确】 【世界第' + str(pm) + '名】' 
 result.write(line+'\n') 
 else: 
 line = line + ' 【排名错误】 【世界第' + str(pm) + '名】' 
 result.write(line+'\n') 
 else: #文件中没有排名 
 line = line + ' 【新加排名】 【世界第' + str(pm) + '名】' 
 result.write(line+'\n') 
 count = count + 1 
else: 
 print 'End Sorted' 
 source.close() 
 result.close() 
 
''''' 
第四部分 输出一个排序好的文件 便于观察 
''' 
source = open("F:\\Student\\1Area.txt",'r') 
lines = source.readlines() 
result = open("F:\\Student\\1NewSortArea.txt",'w') 
#i表示第i名 L[i][0]表示行数 
pm = 0 
for i in range(len(L)): 
 pm = L[i][0] 
 count = 1 
 for line in lines: 
 line = line.rstrip('\n') 
 if count==pm: 
 line = line + ' 【世界第' + str(i+1) + '名】' 
 result.write(line+'\n') 
 break 
 else: 
 count = count + 1 
else: 
 print 'End Sorted Second' 
 source.close() 
 result.close()

最后希望文章对你有所帮助,文章主要通过讲述一个实际操作,帮你巩固学习liet列表的二维排序和字符串txt处理。如果文中有错误或不足之处,还请海涵~

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Python 相关文章推荐
Python多线程学习资料
Dec 19 Python
Python的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
Python爬取三国演义的实现方法
Sep 12 Python
Python 爬虫学习笔记之多线程爬虫
Sep 21 Python
使用Python对Access读写操作
Mar 30 Python
Python排序搜索基本算法之希尔排序实例分析
Dec 09 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
Python 专题四 文件基础知识
Mar 20 #Python
python 与GO中操作slice,list的方式实例代码
Mar 20 #Python
Python闭包的两个注意事项(推荐)
Mar 20 #Python
使用python实现生成用户信息
Mar 20 #Python
Unicode和Python的中文处理
Mar 19 #Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
Mar 19 #Python
Python 专题三 字符串的基础知识
Mar 19 #Python
You might like
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
Python strip lstrip rstrip使用方法
2008/09/06 Python
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
python执行使用shell命令方法分享
2017/11/08 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
深入解析神经网络从原理到实现
2019/07/26 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
Python定义一个Actor任务
2020/07/29 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
汇智创新科技发展有限公司
2015/12/06 面试题
2014学年自我鉴定
2014/02/23 职场文书
商铺门前三包责任书
2014/07/25 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL