Вот решение, которое
- использует регулярное выражение для сканирования всех вхождений заглавной буквы, за которой следует число в скобках
- преобразовывает пары строк из регулярного выражения с выражением генератора в кортежи (значение, ключ)
- возвращает ключ из кортежа с наибольшим значением
Я также добавил основную функцию, чтобы скрипт можно было использовать как инструмент командной строки для чтения всех строк из одного файла и записи ключа с наибольшим значением для каждой строки в выходной файл. Программа использует итераторы, поэтому она эффективно использует память независимо от размера входного файла.
import re
KEYVAL = re.compile(r"([A-Z])\s*\((\d+)\)")
def max_item(row):
return max((int(v),k) for k,v in KEYVAL.findall(row))[1]
def max_item_lines(fh):
for row in fh:
yield "%s\n" % max_item(row)
def process_file(infilename, outfilename):
infile = open(infilename)
max_items = max_item_lines(infile)
outfile = open(outfilename, "w")
outfile.writelines(max_items)
outfile.close()
if __name__ == '__main__':
import sys
infilename, outfilename = sys.argv[1:]
process_file(infilename, outfilename)
Для одного ряда вы можете позвонить:
>>> max_item("A (8) C (4) G (48419) T (2)")
'G'
И для обработки полного файла:
>>> process_file("inputfile.txt", "outputfile.txt")
Если вам нужен фактический список Python максимального значения каждой строки, вы можете использовать:
>>> map(max_item, open("inputfile.txt"))