输入:
lst=[ ' 22774080.570 7 1762178.392 7 1346501.808 8 22774088.434 8\n',
' 20194290.688 8 -2867460.044 8 -2213132.457 9 20194298.629 9\n']
所需的输出:
['22774080.570 7','none','1762178.392 7','1346501.808 8','22774088.434 8'],
['20194290.688 8','none','-2867460.044 8', .... ]
答案 0 :(得分:0)
我不会马上回答你的问题,因为它不是stackoverflow的工作方式,但我会给你一些提示。
<强> HINTS 强>
首先,您可以使用for
loop迭代第一个列表lst
的每一行。
然后,您需要拆分此行的每个数字,幸运的是,它总是需要16个字符。
在python中,有几种方法可以这样做。对您进行的良好培训是在for
循环中使用range
function。然后在python字符串中使用slicing。
现在,它可能会在每个数字的开头留下一些额外的空格。删除它们的好方法是使用strip()
function。
您需要做的最后一件事是append
每个清理字符串到一个新列表(例如result
)
<强> END 强>
只要您正确地尝试编辑您的答案,我就会使用工作函数编辑我的答案。祝你好运!
编辑
由于我的同名@Max Chesterfield已经给出答案,我会给我的。您可以使用generator来精确匹配所需的输出
,而不是使用列表列表def extract_line():
for line in lst:
result = []
for i in range(0, len(line) - 1, 16):
numbers = line[i:i + 16].strip()
result.append(numbers if numbers else None)
yield result
for result in extract_line():
print(result)
将输出:
['22774080.570 7', None, '1762178.392 7', '1346501.808 8', '22774088.434 8']
['20194290.688 8', None, '-2867460.044 8', '-2213132.457 9', '20194298.629 9']
答案 1 :(得分:0)
我在这里做了一些假设,这可能不是最优雅的解决方案,但鉴于您根据空间长度匹配无,这将有效
[[(None if a.strip() == 'None' else a.strip())
for a in l.replace(' ', ' None ').split(' ') if a != ''
] for l in lst]
目前这是作为列表理解实现的,但为了便于阅读,可以很容易地分布在多行上
new_list = []
for l in lst:
sub_list = []
for a in l.replace(' ', ' None ').split(' '):
if a != '':
item = a.strip()
sub_list.append(None if item == 'None' else item)
new_list.append(sub_list)
任何一种方法都会产生相同的结果:
[
[
'22774080.570 7', None, '1762178.392 7', '1346501.808 8', '22774088.434 8'
],
[
'20194290.688 8', None, '-2867460.044 8', '-2213132.457 9', '20194298.629 9'
]
]
请记住,用于定义“无”的空格宽度的任何变化都是“无”。将影响这种实施的功能。