最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 專題五 列表基礎(chǔ)知識(二維list排序、獲取下標(biāo)和處理txt文本實(shí)例)

 更新時間:2017年03月20日 14:46:39   作者:Eastmount  
本文主要簡單的介紹使用Python處理txt漢字文字、二維列表排序和獲取list下標(biāo)的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧

通常測試人員或公司實(shí)習(xí)人員需要處理一些txt文本內(nèi)容,而此時使用Python是比較方便的語言。它不光在爬取網(wǎng)上資料上方便,還在NLP自然語言處理方面擁有獨(dú)到的優(yōu)勢。這篇文章主要簡單的介紹使用Python處理txt漢字文字、二維列表排序和獲取list下標(biāo)。希望文章對你有所幫助或提供一些見解~

一. list二維數(shù)組排序

功能:已經(jīng)通過Python從維基百科中獲取了國家的國土面積和排名信息,此時需要獲取國土面積并進(jìn)行排序判斷世界排名是否正確。

列表基礎(chǔ)知識

列表類型同字符串一樣也是序列式的數(shù)據(jù)類型,可以通過下標(biāo)或切片操作來訪問某一個或某一塊連續(xù)的元素。它和字符串不同之處在于:字符串只能由字符組成而且不可變的(不能單獨(dú)改變它的某個值),而列表是能保留任意數(shù)目的Python對象靈活容器。

總之,列表可以包含不同類型的對象(包括用戶自定義的對象)作為元素,列表可以添加或刪除元素,也可以合并或拆分列表,包括insert、update、remove、sprt、reverse等操作。

列表排序介紹

常用列表排序方法包括使用List內(nèi)建函數(shù)list.sort()或序列類型函數(shù)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] 

通過對比下面的代碼,可以發(fā)現(xiàn)兩種方法的區(qū)別是: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表達(dá)式實(shí)現(xiàn)二維列表排序,并且按照第二個關(guān)鍵字進(jìn)行排序。參考文章

#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)] 

題目中如果第一個數(shù)存儲文件中讀取的行號,第二個數(shù)存儲人口數(shù)量,此時可對第二個數(shù)進(jìn)行排序。需要注意的是它們一組(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表達(dá)式

在上述代碼中,如果還不知道lambada是什么鬼東西的話?那我就來幫你回顧了。

python允許使用lambda關(guān)鍵字創(chuàng)造匿名函數(shù),它不需要以標(biāo)準(zhǔn)的方式來聲明,如def語句。然而作為函數(shù),它們也能有參數(shù)。

lambda就是一個表達(dá)式,而不是一個代碼塊。而且這個表達(dá)是的定義必須和聲明放在同一行,能在lambda中封裝有限的邏輯進(jìn)去,起到一個函數(shù)速寫的作用。例如:

#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文件按行讀取,并獲取面積進(jìn)行排序。其中核心代碼如下:

讀取文件&列表添加

source = open("F:\\Student\\1Area.txt",'r') 
lines = source.readlines() 
L = [] #列表二維 國家行數(shù) 人口數(shù) 
count = 1 #當(dāng)前國家在文件中第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平方公里) 
#重點(diǎn) L[i]輸出列表 1 (46, 17075200.0) L[i][0]表示元組tuple第一個數(shù) 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]'等。更簡單的方法是通過正則表達(dá)式或獲取第一個非數(shù)字字符。

運(yùn)行結(jié)果如下所示,排序后的txt和糾錯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 = [] #列表二維 國家行數(shù) 人口數(shù) 
 
''''' 
第一部分 獲取國土面積 
''' 
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: #如何優(yōu)化代碼 全局變量 
 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平方公里) 
#重點(diǎn) L[i]輸出列表 1 (46, 17075200.0) L[i][0]表示元組tuple第一個數(shù) 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]表示行數(shù) 
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() 

最后希望文章對你有所幫助,文章主要通過講述一個實(shí)際操作,幫你鞏固學(xué)習(xí)liet列表的二維排序和字符串txt處理。如果文中有錯誤或不足之處,還請海涵~

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • 使用Python編寫一個瀏覽器集群框架

    使用Python編寫一個瀏覽器集群框架

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個瀏覽器集群框架,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • 詳解Python操作RabbitMQ服務(wù)器消息隊(duì)列的遠(yuǎn)程結(jié)果返回

    詳解Python操作RabbitMQ服務(wù)器消息隊(duì)列的遠(yuǎn)程結(jié)果返回

    RabbitMQ是一款基于MQ的服務(wù)器,Python可以通過Pika庫來進(jìn)行程序操控,這里我們將來詳解Python操作RabbitMQ服務(wù)器消息隊(duì)列的遠(yuǎn)程結(jié)果返回:
    2016-06-06
  • Python使用JWT的超詳細(xì)教程

    Python使用JWT的超詳細(xì)教程

    這篇文章主要介紹了Python使用JWT的相關(guān)資料,JWT(JSON?Web?Tokens)是一種網(wǎng)絡(luò)應(yīng)用間傳輸信息的標(biāo)準(zhǔn),包括三部分:Header(頭部),Payload(負(fù)載),Signature(簽名),頭部包含聲明類型和算法,需要的朋友可以參考下
    2024-10-10
  • ubuntu安裝mysql pycharm sublime

    ubuntu安裝mysql pycharm sublime

    本文給大家匯總介紹了在Ubuntu中如何安裝mysql+pycharm+sublime的方法,有相同需求的小伙伴可以參考下
    2018-02-02
  • Python 列表(List) 的三種遍歷方法實(shí)例 詳解

    Python 列表(List) 的三種遍歷方法實(shí)例 詳解

    這篇文章主要介紹了Python 列表(List) 的三種遍歷方法實(shí)例 詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • python用正則表達(dá)式提取/匹配中文漢字

    python用正則表達(dá)式提取/匹配中文漢字

    在使用Python的過程中,由于需求原因,我們經(jīng)常需要在文本或者網(wǎng)頁元素中用Python正則表達(dá)式匹配中文,下面這篇文章主要給大家介紹了關(guān)于python用正則表達(dá)式提取/匹配中文漢字的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Pandas如何通過np.array函數(shù)或tolist方法去掉數(shù)據(jù)中的index

    Pandas如何通過np.array函數(shù)或tolist方法去掉數(shù)據(jù)中的index

    這篇文章主要介紹了Pandas如何通過np.array函數(shù)或tolist方法去掉數(shù)據(jù)中的index問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python集合add()函數(shù)使用詳解

    Python集合add()函數(shù)使用詳解

    python中add()方法用于給集合添加元素,如果添加的元素在集合中已存在,則不執(zhí)行任何操作,本文將給大家介紹一下Python集合add()函數(shù)使用方法,感興趣的小伙伴跟著小編一起來看看吧
    2023-07-07
  • pytorch 把MNIST數(shù)據(jù)集轉(zhuǎn)換成圖片和txt的方法

    pytorch 把MNIST數(shù)據(jù)集轉(zhuǎn)換成圖片和txt的方法

    這篇文章主要介紹了pytorch 把MNIST數(shù)據(jù)集轉(zhuǎn)換成圖片和txt的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 基于python編寫監(jiān)控系統(tǒng)各項(xiàng)資源的腳本

    基于python編寫監(jiān)控系統(tǒng)各項(xiàng)資源的腳本

    這篇文章主要為大家詳細(xì)介紹了如何編寫一個python腳本,實(shí)現(xiàn)監(jiān)控網(wǎng)絡(luò)的流量、CPU使用率、內(nèi)存使用率和磁盤使用情況,感興趣的小伙伴可以了解下
    2023-11-11

最新評論

水城县| 汨罗市| 南康市| 大姚县| 韶山市| 莆田市| 观塘区| 高密市| 岳西县| 德庆县| 莱阳市| 霍邱县| 景洪市| 永平县| 咸丰县| 临沧市| 梧州市| 佛学| 洞口县| 深泽县| 阿坝县| 介休市| 贵德县| 壶关县| 石城县| 顺昌县| 临朐县| 建昌县| 常熟市| 宁城县| 汉源县| 南投市| 北票市| 古丈县| 合阳县| 金沙县| 海原县| 洛浦县| 囊谦县| 宝清县| 仙游县|