如何从整数列表中提取每个数字?

3

作为一个新手,这给我带来了一些麻烦。

假设有一个像这样的整数列表

 [2, 0, 0, 0, 0, 12, 0, 8]

如何提取每个元素中的单个数字以形成一个新列表

 [2,1,2,8] 

我曾考虑通过遍历每个元素并使用模运算符来实现,但似乎找不到正确的逻辑。
非常感谢您的帮助。

列表中元素的顺序是否重要?例如,20应该分解为0然后2,还是应该先出现2? - Sumedh Patkar
@SumedhPatkar 不,这种情况下顺序并不重要。我只需要提取每个单独的数字,然后将它们相加即可。 - Conor Ladrigan
3个回答

3

我认为最简单的方法是将值转换为字符串,提取单独的字符,然后再将它们转换回整数。

例如:

lst = [2, 0, 0, 0, 0, 12, 0, 8]

digits = []
for value in lst:
    if value != 0:
        digits.extend(map(int, str(value)))

print(digits)

输出:

[2, 1, 2, 8]

2

您可以先将所有数字转换为字符串列表,再将每个字符串转换为整数,然后使用itertools.chain.from_iterable平坦化结果:

>>> from itertools import chain
>>> lst = [2, 0, 0, 0, 0, 12, 0, 8]
>>> list(chain.from_iterable(map(int, str(x)) for x in lst if x != 0))
[2, 1, 2, 8]

1

由于0也是一个数字,考虑以下情况,如果一个数像10、20、30、40……那么它应该是1、0、2、0、3、0……依此类推。

那么你的新列表是否需要0?

如果答案是“不需要”,那么thisthis的答案就失败了。这里有一个解决方案。

myList = [10, 0, 0, 0, 0, 12, 0, 8]

newList = []
for i in myList:
    while i >= 10:
        newList.append(i%10)
        i = i//10
    newList.append(i)

newList = [ x for x in newList if x != 0 ]

这个解决方案也满足了您的模数逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接