2015-03-16 3 views
1

У меня есть данные в трех столбцах следующим образом. Я пытаюсь определить положение наибольшего значения в каждой строке (1,2,3), а также игнорировать строки, в которых наибольшее значение имеет место более одного раза. В приведенном ниже скрипте будет указано наивысшее значение в каждой строке, но я не могу исправить две другие проблемы. Любой совет будет очень благодарен!Идентификация наибольшего числа в строке с Python

0 3 3 
3 3 3 
3 3 3 
0 3 3 
3 4 3 


data = open('file.csv', 'r') 

rows = [] 
for line in data: 
    row = [int(each) for each in line.split()] 
    rows.append(row) 

data.close() 

columns = zip(*rows) 


for index, column in enumerate(rows): 
    print max(column) 
+0

любой кусок кода, который вы написали, и что не работает очень ценится, а также .. – EsseTi

ответ

3

Поскольку все ваши строки в в списке, вы можете цикл по этому списку и использовать несколько встроенных модулей, чтобы найти информацию, которую вы хотите:

gvalues = [] 
for row in rows: 
    highest = max(row) 
    tally = row.count(highest) 
    position = row.index(highest) 

    if tally == 1: 
     gvalues.append((highest, position)) 
    else: 
     gvalues.append((None, None)) 

После завершения этой, у вас будет список gvalues, который содержит кортежи highest value, position для каждой строки. Он будет содержать None, None для строк, где есть более одного из highest.

Для примера вы при условии, что будет выводить [(None, None), (None, None), (None, None), (None, None), (4, 1)]

0

Вы можете вернуть список, с немного меньшим количеством кода, используя Питона count. ОП запросил только индекс наивысшего значения, если он уникален.

max_index = list() 
    for i in a: 
     if i.count(max(i))>1: 
      max_index.append(None) 
     else: 
      max_index.append(i.index(max(i))) 

Этот пример возвращает [None, None, None, None, 1]

Смежные вопросы