2016-11-09 39 views
-1

輸入:變換列表

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

你有什麼嘗試,你會得到更好的迴應,如果你顯示一些嘗試解決問題。 – AChampion

回答

0

我不會回答你的問題的時候了,因爲它不是如何計算器的作品,但我會給你一些提示。

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'] 
0

我在這裏做了一些假設,這可能不是最優雅的解決方案,但考慮到基於空間的長度您匹配的無,這將工作

[[(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' 
] 
] 

記住,到的空間中使用的寬度的任何變化,以限定「無」將影響此實施的功能。

+0

因爲我懷疑她會編輯或[接受答案](http://stackoverflow.com/help/accepted-answer),但是你可以使用'generator'而不是列表中的子列表看到我的答案)以匹配所需的輸出。 –

+1

@Max Chretein,我不知道!謝謝(你的)信息 :) –