Re: [問題] 如何優化迴圈的寫法
※ 引述《xji4y3ru (千眼萬雨)》之銘言:
: 我寫了一個把檔案的位元順序顛倒之後再生成新檔案的程式,用的主要是list跟while,
: 程式碼如下:
: -------------------------------------------
: 檔案大小在100kb左右速度都還可以在數秒中完成,但是200kb就要十幾秒,500kb大約就
: 要1分鐘。請問是不是因為這個寫法太笨了,浪費太多時間?有什麼可以優化的作法嗎?
其實我覺得問題不是出在迴圈,而是 list 變大之後操作起來太緩慢
我寫了一個不用 list 的版本
先用 seek 和 tell 得知檔案大小以後,直接從檔案尾寫到檔案頭
照理說迴圈從兩個變一個,速度頂多是兩倍快,但快了大概幾十倍
#!/usr/bin/env python3
#
# Invert a file
#
import os
fin = open("pi-py.txt", "rb")
fout = open("output.txt", "wb")
fin.seek(0, 2) # Goto end
in_size = fin.tell()
fin.seek(0, 0) # Goto start
n = in_size-1
while (n>=0):
ch = fin.read(1)
fout.seek(n, 0)
fout.write(ch)
n-=1
fin.close()
fout.close()
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
後來又想到可以不用迴圈直接反轉字串的方法,速度更快
#!/usr/bin/env python38
#
# Invert a file
#
fin = open("pi-py.txt", "rb")
fout = open("output.txt", "wb")
fstr = fin.read()
fstr = fstr[::-1]
fout.write(fstr)
fin.close()
fout.close()
--
桃樂絲: 可是, 如果你沒有頭腦, 為什麼會說話?
稻草人: ㄝ, 我也不知... 但是有些人沒有頭腦也能說超~多話呢。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.54.51 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1614592913.A.57B.html
※ 編輯: Schottky (111.250.54.51 臺灣), 03/01/2021 18:12:28
推
03/01 21:55,
3年前
, 1F
03/01 21:55, 1F
討論串 (同標題文章)