Re: [問題] 如何去除迴圈後多餘的東西

作者: ddavid (謊言接線生)   2019-12-05 21:05:46
如果一定要用for loop的話,在確定只有省略最後一次的情況下,我個人會比較
喜歡這種直接在後做一次的方式。
a = [1, 2, 3, 4, 5]
last_index = len(a) - 1
for i in range(last_index):
print(a[i], end=",")
print(a[last_index])
之所以要用個last_index,只不過是不想要進行兩次len(a)取長度而已,可省略
這個變數直接把last_index都寫成len(a) - 1就好,行數上更精簡一點。
比較重要的是不要直接for i in a而是改用index,這樣我們就可以避開必須判
讀哪一個元素是最後一個的問題,雖然也可以這麼寫:
for i in a:
if i == a[len(a) - 1]:
print(i)
else:
print(i, end=",")
第二種寫法也可以改用index來處理,這在如果元素內容比對其實相對比較昂貴
的情況下更為理想:
for i in range(len(a)):
if i == len(a) - 1:
print(a[i])
else:
print(a[i], end=",")
總之這些寫法都不用在迴圈中指明最後一個元素是5,陣列a的內容可以隨意改
變而不用動到迴圈的code。
第一種寫法的好處是甚至不需要多加一個判斷在迴圈中,缺點是這種方法只能處
理陣列首尾有不同處理方式的情況,在中間的話就不好這麼處理了。
第二種寫法的缺點是迴圈裡需要持續做判斷元素內容,如果這個判斷相對昂貴(
比如是大字串或複雜的class),這樣寫就很蠢了,應當改為第三種的index處理方式
。而第二/三種寫法同樣的優點就是如果想變動的某些事情不只發生在首尾,則很容
易藉由增加if條件的方式來補充特例項目。
第二種寫法並非一無是處,因為如果我們的例外要求並不只是看index而是看元
素內容(舉例來說,如果是奇數我們就不加逗號,想要輸出312,5734,156,3這樣的東
西),而且元素內容不一定跟index有關的情況下,那麼當然就需要第二種寫法。
作者: s4028600 (佑)   2019-12-06 03:51:00
只是因為我那篇在實驗各位解法的時候 發現我的列表和我的問題不一樣所以才在下面補充列表 實際上已經解決 不過有各種解法也很好你這個很好理解 雖然奇數不加逗號我想不出用在哪裡 目前只用在爬蟲就是了

Links booklink

Contact Us: admin [ a t ] ucptt.com