[問題] 求解有幾個位數不同的問題

看板Python作者 (泓豆醬料)時間6年前 (2018/04/03 01:37), 6年前編輯推噓1(2114)
留言17則, 4人參與, 6年前最新討論串1/1
令a和b為兩變數(0~9999),可自行輸入 試求有幾個位數不同 例如:1234/2345。 四個位數不同 例如:1123/1233。兩個位數不同 有人知道要怎麼表達嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.8.1 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1522690633.A.D2D.html ※ 編輯: Redbeansauce (114.136.8.1), 04/03/2018 01:37:43

04/03 02:26, 6年前 , 1F
假定 a, b 是字串,所求:
04/03 02:26, 1F

04/03 02:26, 6年前 , 2F
sum([ a[i] != b[i] for i in range(len(a)) ])
04/03 02:26, 2F

04/03 03:23, 6年前 , 3F
樓上這樣 1). 沒有考慮len(b) < len(a)的時候會有error
04/03 03:23, 3F

04/03 03:23, 6年前 , 4F
2). 比較慢又不pythonic
04/03 03:23, 4F

04/03 03:25, 6年前 , 5F
我認為正確的作法是sum(x != y for x, y in zip(a, b))
04/03 03:25, 5F

04/03 03:28, 6年前 , 6F
這是當a,b一樣長的時候,不保證一樣的時候
04/03 03:28, 6F

04/03 03:29, 6年前 , 7F
sum(x != y for x, y in zip(reversed(a), reversed(b)))
04/03 03:29, 7F

04/03 03:38, 6年前 , 8F
噢對!但也許應該要前面放 assert ?
04/03 03:38, 8F

04/03 03:38, 6年前 , 9F
但若長度不一樣的話,用 zip 會補 None 然後算成不同
04/03 03:38, 9F

04/03 03:38, 6年前 , 10F
不確定是否滿足需求...
04/03 03:38, 10F

04/03 03:39, 6年前 , 11F
從原 Po 的敘述來看應該是要補 0
04/03 03:39, 11F

04/03 05:26, 6年前 , 12F
嗯嗯有道理我第二個答案會忽略比較長的
04/03 05:26, 12F

04/03 05:29, 6年前 , 13F
把第二個答案zip換成itertools.zip_longest應該可以
04/03 05:29, 13F

04/03 10:15, 6年前 , 14F
應該先說一下自己的想法
04/03 10:15, 14F
恩恩感謝大家的回答,因為我昨天才剛學兩小時 我有做出來,但我的方式很慢,就是列舉法把他們變成字串後一個一個去比較,覺得自己 非常腦,所以才來問orz ※ 編輯: Redbeansauce (114.136.8.1), 04/03/2018 10:36:49

04/03 12:12, 6年前 , 15F
你的思路沒錯阿
04/03 12:12, 15F

04/03 12:18, 6年前 , 16F
轉 str 用 zfill
04/03 12:18, 16F

04/03 12:19, 6年前 , 17F
其實這根本就只是對 python buildin function 記多少而以
04/03 12:19, 17F
文章代碼(AID): #1Qmcf9qj (Python)