Python:在一行中优雅地打印列表中的所有*剩余*元素

Python:在一行中优雅地打印列表中的所有*剩余*元素,python,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" + c

我正在寻找替换其中一个元素后打印元素列表的最正确方法。我可以这样做,但它显然是混乱的

#!/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”

这会给代码的最后一行带来相同的行为:

print cols[0] + "\tNo_match\t" + ''.join(cols[2:])
print cols[0] + "\tNo_match\t" + '\t'.join(cols[2:])
要匹配代码的修订版本,请执行以下操作:

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

这将为代码的最后一行提供相同的行为:

print cols[0] + "\tNo_match\t" + ''.join(cols[2:])
print cols[0] + "\tNo_match\t" + '\t'.join(cols[2:])
要匹配代码的修订版本,请执行以下操作:

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

您可以使用字符串的
join
方法打印列表:

cols[1] = "No_Match"
print '\t'.join(cols)
这将打印出由“\t”分隔的所有COL条目

注意我是如何首先替换cols的元素1的。如果你不想那样做,你也可以这样做

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


您可以使用字符串的
join
方法打印列表:

cols[1] = "No_Match"
print '\t'.join(cols)
这将打印出由“\t”分隔的所有COL条目

注意我是如何首先替换cols的元素1的。如果你不想那样做,你也可以这样做

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


完美的非常感谢你。我仍在学习并强迫自己编写python而不是perl,有时会陷入困境!完美的非常感谢你。我仍在学习并强迫自己编写python而不是perl,有时会陷入困境!你能更清楚地说明你的期望吗?例如,匹配条件是否总是
float(cols[2])>97
?cols[2]将始终是输入与数据库匹配程度的百分比分数。我在这里硬编码'97'只是作为一个例子,但最终用户将能够在运行时指定。您能更清楚地了解您的期望吗?例如,匹配条件是否总是
float(cols[2])>97
?cols[2]将始终是输入与数据库匹配程度的百分比分数。我在这里硬编码'97'只是作为一个例子,但最终用户将能够在运行时指定。我实现了@senshin's,因为它首先出现,然后阅读您的,并意识到如果我替换字段,那么整个代码现在只有7行。谢谢被接受是因为我认为它是最“Pythonically”正确的。我首先实现了@senshin's,然后阅读了您的,并意识到如果我替换字段,那么整个代码现在只需7行。谢谢被接受是因为我认为这是最“Pythonically”正确的。