2014-01-21 70 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