变换列表
输入:变换列表
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', .... ]
我不会回答你的问题的时候了,因为它不是如何计算器的作品,但我会给你一些提示。
HINTS
首先,您可以通过使用
for
loop第一个列表lst
的每一行迭代。然后,你需要拆分这一行的每一个数字,幸运的是,它总是花费16个字符。 在Python中,有severals办法做下去。对您的良好培训将在
for
循环中使用range
function。然后在Python字符串中使用slicing。现在,它可能会在每个数字的开头保留一些额外的空格。除去他们的一个好方法是使用
strip()
function。你需要做的最后一件事就是
append
每干净串到一个新的列表(例如result
)
END
我将编辑我的回答与工作功能只要你适当的尝试编辑你的。祝你好运!
编辑
因为我同名@Max切斯特菲尔德已经作出了回答,我给我的。而不是使用列表的列表,你可以使用一个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']
我在这里做了一些假设,这可能不是最优雅的解决方案,但考虑到基于空间的长度您匹配的无,这将工作
[[(None if a.strip() == 'None' else a.strip())
for a in l.replace(' ', ' None ').split(' ') if a != ''
] for l in lst]
这是目前作为一个列表理解来实现,BU吨可以很容易地扩展到多个线,用于可读性这样
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'
]
]
记住,到的空间中使用的宽度的任何变化,以限定“无”将影响此实施的功能。
因为我怀疑她会编辑或[接受答案](http://*.com/help/accepted-answer),但是你可以使用'generator'而不是列表中的子列表看到我的答案)以匹配所需的输出。 –
@Max Chretein,我不知道!谢谢(你的)信息 :) –
你有什么尝试,你会得到更好的回应,如果你显示一些尝试解决问题。 – AChampion