看板 Python 關於我們 聯絡資訊
各位Python的前輩您好,我個人是初學python的小嫩嫩 想藉由這次的題目跟大家討論看看幾個問題: (1)原列表[9,9,9,9],加上固定的值1以後,轉換成[1,0,0,0,0] 即可參考cutekid大大的寫法 (2)但是原列表[9,9,9,9],加上固定的值1以後,如欲轉換成[0,0,0,0] 除了jasonislin大大的寫法以外,是否還有其他方法可達成? 因為針對(2)這個題目,小弟理解的邏輯和做法是: 1.將原列表轉換成數字,如[0,0,9,9]就轉換成99 2.將轉換成的數字+1 3.利用zfill函數將得到的數字補足成四位數字 4.從後面將數字讀入新列表,以確保不會讀到第5位數字(例如10000時,只讀取0000) 5.得到的新列表利用reverse函數將列表重新表達 6.print 新的列表 還請各位前輩不吝指教,讓小弟可以多學習,以及加強對列表的概念 謝謝 ※ 引述《jasonislin (jason)》之銘言: : def increment(self, add=1, output=[]): : for index, value in enumerate(self[::-1]): : add += value * 10 ** (index) : output.insert(0, (add // 10 ** index ) % 10) : return output : print(increment([0, 9, 9, 9]) : # 我的結構弄得比較複雜, 希望能再精進, 望版友不吝指正, 謝謝:-) ; : # 概念為: 將數列視為10為底的指數列, 並依位數加總運算 : # 1. 預設arg: add=1 (whole list increment by 1), output (empty list) : # 2. 利用enumerate()及slicing[start:end:step]作數列運算-由各個位數加總 : # : # for index, value in enumerate(self[::-1]): : # >>> 0, 9 : # 1, 9 : # 2, 9 : # 3, 0 : # 依序為(倒數)第0項(start=0), 第0項值 : # : # 3. 利用list.insert(index=0, x)特性及operator計算各位數的值 : # 4. add值為總合 : # : ※ 引述《rexyeah (ccccccc)》之銘言: : : a = [0, 9, 9, 9] : : def s(n): : : return n+1 if n < 9 else (n+1) % 10 : : print map(lambda x: s(x), a) : : == : : Output : : [1, 0, 0, 0] -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.26.1.234 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1538104196.A.E5E.html
rexyeah: 你的第三步 % 10**4 再zfill然後轉成數字陣列就好了 09/28 11:37
rexyeah: 10 ** 4可以改成 10 ** len(a) # a = [9,9,9,9] 09/28 11:38
jasonislin: 參考cutekid版友的運算,最後一行結構改為: 09/28 11:42
jasonislin: return [int(x) for x in numList[... 09/28 11:43
jasonislin: [...len(numList)-len(self):]] 09/28 11:44
jasonislin: 我補充在原文,還是以cutekid版友的運算思維較為精煉 09/28 11:57
sherees: x = [...] y = [int(n) for n in str(int(‘’.join(x) 09/28 15:17
sherees: ))] 09/28 15:17
sherees: 上面少一個+1 09/28 15:35
sherees: 在int 的掛號後面 09/28 15:36