2014-01-21 68 views
1

我正在尋找最正確的方式來打印元素列表後,替換其中之一。我可以做如下,但顯然是凌亂。Python:從列表中優雅地打印所有*剩餘*元素

#!/usr/bin/python 

import sys 

file = open(sys.argv[1]) 

for line in file: 
    cols = line.split('\t') 

    if(float(cols[2]) > 97): 
     print line 
    else: 
     print cols[0] + "\tNo_Match\t" + cols[2] + "\t" + cols[3] + "\t" + cols[4] + "\t" + ..... + "\t" +cols[20] 

編輯:我只是意識到,因爲我錯過了+「\ t」的

+0

請您約你所期望的更清晰?例如,匹配條件是否總是'float(cols [2])> 97'? –

+0

cols [2]將始終是輸入與數據庫匹配程度的百分比。我在這裏硬編碼'97'只是一個例子,但最終用戶將能夠在運行中指定。 – Daniel

回答

3

你可以使用的的join方法字符串打印清單:

cols[1] = "No_Match" 
print '\t'.join(cols) 

這將打印出來,由「\ t」分隔的cols的所有條目。

請注意,我首先替換了cols的元素1。如果你不想這樣做,你可以做任何

print '\t'.join(cols[0:1]+['No_Match']+cols[2:]) 

print '\t'.join([x if i != 1 else 'No_Match' for i, x in enumerate(cols)]) 
+0

我首先實現了@ senshin,然後閱讀你的意見,並且意識到如果我替換該字段,使得整個代碼現在只有7行,這會更簡單。謝謝! – Daniel

+0

接受,因爲我認爲這是最「正確的」。 – Daniel

4

這給了相同的行爲在你的代碼的最後一行,將會變得更糟糕:

print cols[0] + "\tNo_match\t" + ''.join(cols[2:]) 

爲了滿足你的代碼的修訂版:

print cols[0] + "\tNo_match\t" + '\t'.join(cols[2:]) 
+0

+1給他相同的輸出:) –

+0

完美。非常感謝你。我仍然在學習,強迫自己寫python而不是perl,有時會卡住! – Daniel