作为一个新手,这给我带来了一些麻烦。
假设有一个像这样的整数列表
[2, 0, 0, 0, 0, 12, 0, 8]
如何提取每个元素中的单个数字以形成一个新列表
[2,1,2,8]
我曾考虑通过遍历每个元素并使用模运算符来实现,但似乎找不到正确的逻辑。
非常感谢您的帮助。
作为一个新手,这给我带来了一些麻烦。
假设有一个像这样的整数列表
[2, 0, 0, 0, 0, 12, 0, 8]
如何提取每个元素中的单个数字以形成一个新列表
[2,1,2,8]
我认为最简单的方法是将值转换为字符串,提取单独的字符,然后再将它们转换回整数。
例如:
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]
您可以先将所有数字转换为字符串列表,再将每个字符串转换为整数,然后使用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]
由于0也是一个数字,考虑以下情况,如果一个数像10、20、30、40……那么它应该是1、0、2、0、3、0……依此类推。
那么你的新列表是否需要0?
如果答案是“不需要”,那么this和this的答案就失败了。这里有一个解决方案。
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 ]
这个解决方案也满足了您的模数逻辑。