我有以下列表,其中包含整数和nan值:
x = [8, 8, 3, 3, 2, 9, nan, nan, nan, 4, 1, 9, 4, 8, 2, nan, nan, nan, nan, 2, 2, 1, 1, 1, 2, nan, nan, nan, nan, 4, 1, 9, 5, 8, 3, 8, 8, 8, 3, 4, 2, nan]
我想把整数连接成一个数字,把nan值保持在它们的位置上。此外,每个新数字应包含6位数字。
新的列表应该是这样的:
x = [883329, nan, nan, nan, 419482, nan, nan, nan, nan, 221112, nan, nan, nan, nan, 419583, 888342, nan]
我尝试了以下代码,但这不是我想要的
y =''.join(str(n) for n in x)
k=list(map(''.join, zip(*[iter(y)]*6)))
k = [883329, nannan, nan419, 482nan, nannan, nan221, 112nan, nannan, nan419, 583888, 342nan]
关于如何解决这个问题,有什么建议吗?
您可以使用groupby和grouper配方执行以下操作:
from numpy import nan, isnan
from itertools import groupby, zip_longest
x = [8, 8, 3, 3, 2, 9, nan, nan, nan, 4, 1, 9, 4, 8, 2, nan, nan, nan, nan, 2, 2, 1, 1, 1, 2, nan, nan, nan, nan, 4, 1,
9, 5, 8, 3, 8, 8, 8, 3, 4, 2, nan]
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(fillvalue=fillvalue, *args)
result = []
for k, v in groupby(x, key=isnan):
if k:
result.extend(list(v))
else:
result.extend(int(''.join(g)) for g in grouper(6, map(str, v)))
print(result)
输出
[883329, nan, nan, nan, 419482, nan, nan, nan, nan, 221112, nan, nan, nan, nan, 419583, 888342, nan]