作者handsomeLin (NickLin)
看板Python
标题Re: [问题] 新手list问题请教
时间Wed Sep 26 13:38:09 2018
※ 引述《chinsun ()》之铭言:
: 大家好,我目前在国外求学,算是程式新手
: 班上一个人都不认识,助教的口音也几乎听不懂QQ
: 只好拿作业上来问
: 题目是要写一个increment的方法,输入和输出的型态都要是list
: 例子:
: z=[0,9,9,9]
: z.increment()
: 我目前写的:
: def increment(self):
: zadd=self.amount
: a=zadd
: while '9' in a:
: a.remove('9')
: if a==[]:
: zadd=['0',zadd] #如果阵列里全是9,在最前面加0
: i=len(zadd)
: while i!=0:
: if zadd[i-1]=='9' :
: zadd[i-1]='0' #一项一项将9转为0
: i-=1
: else:
: zadd[i-1]+=1 #非9的话加1
: return zadd
: 将9转为0那边没有问题
: 但当阵列全为9,在最前面加入0那边
: 不知道为什麽zadd其中的9也跟着a被remove掉
: 举个例子,如果输入['0','9','9','9'],a会变成['0'],但zadd也会一起变成['0']
: 但我以为zadd应该还是原本的样子
: 第二个问题是else里+1那边,请问要怎麽做才能让list中的东西进行运算呢
: 我试过将他转成string,但还是显示must str not int
: 感谢
先回答你第一个问题,你a = zadd的时候只是把zadd的记忆体位置传给a而已
这点你可以用id()去看,他们指向的是同一个物件
你直接对这个物件操作(remove) 自然就删掉zadd 或是你self.count都一样被改变了
你真的想要去算有几个9 又不考虑time complexity直接用count就行了
zadd.count('9) == len(zadd)
这题解法 可以利用上一题直接join转成字串再转成数字+1
python数字的上限取局於记忆体 所以基本上不用担心overflow的问题
但是显然不是最佳解 比如说list长度是个一万 还是有机会overflow
下面写一段假设里面是数字
for i in range(len(z) - 1, -1, -1):
z[i] = (z[i] + 1) % 10
if z[i]:
break
if z and not z[0]:
z.insert(0, 0)
(如果是字串 就用int先转成数字 然後再转回str就行了
if z[i] 改成 if z[i] != '0')
从最後一位开始加1 如果不是0代表不用进位break直接结束loop
如果全部都是0 就代表要新增一位(照你的叙述是摆0)
我上面这段是直接对z操作
p.s zadd = [0, zadd] 这样会是[int , list]的形式
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 69.181.62.237
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1537940294.A.689.html
※ 编辑: handsomeLin (69.181.62.237), 09/26/2018 13:43:29
2F:→ s077022: 你们教授这题考的是将list型态转int型态後 ,经过计算後 09/27 10:21
3F:→ s077022: ,再将int转list型态 09/27 10:21
4F:推 s077022: 如果没有要强制前面加新的元素 ,下图是答案 09/27 10:29
6F:→ handsomeLin: 这位大大你的code reverse了东西两次呢 09/27 23:29
7F:→ handsomeLin: 还有你的字串长度hard code了... 09/27 23:30
8F:推 s077022: 谢谢楼上指教 ,因为我不是专业的coder ,纯兴趣 ,不过您 09/28 08:40
9F:→ s077022: 的建议我会听进去 ,谢谢您的即时回馈 , 谢谢 09/28 08:40