如何在python中用更少的时间使这些代码更加高效



我有一个家庭作业,我必须使用罗马尼亚字母解码和编码一串数字。100050010050105.1

在这个函数中,我有一个类似于"10010010010100511"的字符串,名为xkcd,并且我必须返回一个int列表,如[100010010010110100,5,1,1,],其中我分隔数字。我想知道是否有更有效的方法来做到这一点。感谢

lista=[]
for i in range(len(xkcd)):       #xkcd is a string given to the function
if xkcd[i:i+4] == '1000':
lista.append( int( xkcd[i:i+4] ) )
elif xkcd[i:i+3] == '500':
lista.append( int( xkcd[i:i+3] ) )

elif xkcd[i:i+3] == '100':
lista.append( int( xkcd[i:i+3] ) )
elif xkcd[i:i+2] == '50':
lista.append( int( xkcd[i:i+2] ) )
elif xkcd[i:i+2] == '10':
lista.append( int( xkcd[i:i+2] ) )
elif xkcd[i:i+1] == '5':
lista.append( int( xkcd[i:i+1] ) )
elif xkcd[i:i+1] == '1':
lista.append( int( xkcd[i:i+1] ) )
return lista

最好的计划是注意零是关键。如果该字符不是0,则会启动一个新值。如果它是一个零,那么它会附加到上一个值。此代码只查看每个字符一次:

def analyze(xkcd):
result = []
for c in xkcd:
if c == '0':
result[-1] += c
else:
result.append( c )
return result
print(analyze('10010010010100511'))

输出:

['100', '100', '100', '10', '100', '5', '1', '1']

最新更新