更快速地将int转换为单个数字列表?

2024-06-06 12:25:20 发布

您现在位置:Python中文网/ 问答频道 /正文

所有人

我想定义一个int(987654321)<;=>;[9,8,7,6,5,4,3,2,1]转换器,如果int number的长度<;9,例如10列表将是[0,0,0,0,0,1,0] ,如果长度>;9,例如9987654321,则列表将为[9、9、8、7、6、5、4、3、2、1]

>>> i
987654321
>>> l
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> z = [0]*(len(unit) - len(str(l)))
>>> z.extend(l)
>>> l = z
>>> unit
[100000000, 10000000, 1000000, 100000, 10000, 1000, 100, 10, 1]

>>> sum([x*y for x,y in zip(l, unit)])
987654321
>>> int("".join([str(x) for x in l]))
987654321


>>> l1 = [int(x) for x in str(i)]
>>> z = [0]*(len(unit) - len(str(l1)))
>>> z.extend(l1)
>>> l1 = z
>>> l1
[9, 8, 7, 6, 5, 4, 3, 2, 1]

>>> a = [i//x for x in unit]
>>> b = [a[x] - a[x-1]*10 for x in range(9)]
>>> if len(b) = len(a): b[0] = a[0]  # fix the a[-1] issue
>>> b 
[9, 8, 7, 6, 5, 4, 3, 2, 1]

我测试了以上的解决方案,但是发现这些方案可能没有我想要的那么快/简单,而且可能有一个与长度相关的错误,有谁可以和我分享一个更好的解决方案来进行这种转换?

谢谢!


Tags: inltgtl1number列表forlen
3条回答
def convert(number):
    stringified_number = '%s' % number
    if len(stringified_number) < 9:
        stringified_number = stringified_number.zfill(9)
    return [int(c) for c in stringified_number]

>>> convert(10)
[0, 0, 0, 0, 0, 0, 0, 1, 0]

>>> convert(987654321)
[9, 8, 7, 6, 5, 4, 3, 2, 1]

也许我漏掉了什么,但这还不够吗(没有价值检查)?

def int_to_list(i):
    return [int(x) for x in str(i).zfill(9)]

def list_to_int(l):
    return int("".join(str(x) for x in l))

引用:^{}

那又怎么样:

def int_to_list(num)
    return list ("%010d" % num)

相关问题 更多 >