Как написать код, где максимальное число строки не повторяется
Файл электронной таблицы содержит в каждой строке семь натуральных чисел. Определите сумму всех чисел в строке таблицы с наименьшим номером, для чисел которой выполнены условия:
- в строке есть два числа, каждое из которых повторяется дважды, остальные три числа различны;
- максимальное число строки не повторяется.
В ответе запишите только число.
f = open("9")
cnt = 0
for s in f:
a = list(map(int, s.split()))
povt = [x for x in a if a.count(x) > 1]
ne_povt = [x for x in a if a.count(x) == 1]
if (len(ne_povt) == 3 and len(set(povt)) == 2) and max(ne_povt) == 1:
cnt += 1
print(cnt)
Ответы (3 шт):
С максимумом вы что-то не то делаете, нужен же общий максимум. И при нахождении подходящей строки нужно вывести сумму и остановиться.
if len(ne_povt) == 3 and len(set(povt)) == 2 and (max(a) in ne_povt):
print(sum(a))
break
with open('9') as fl:
for rec in fl:
numbers = tuple(int(i) for i in rec.split())
mx = max(numbers)
numbers_repeat = set(i for i in numbers if numbers.count(i) == 2) # есть ли повторения 2 по 2
other_numbers = set(i for i in numbers if i not in (numbers_repeat)) # получаем остальные 3 различных числа
if len(numbers_repeat) == 2 and len(other_numbers) == 3 and mx not in (i for i in numbers if numbers.count(i)>1):
print(sum(numbers))
break
Решение использовать count в конструкции вида [x for x in a if a.count(x) ...], где a - это список, несколько опрометчиво. При малых размерах вы можете не заметить, что у этого подхода сложность O(n²), т.е. на каждом элементе вы гарантированно проходите список от начала до конца. Обратите внимание на collections.Counter (вопрос о сложности алгоритма в реализации этого класса обсуждается здесь).
Один из вариантов, как решить задачу:
from collections import Counter
path = ... # путь к файлу данных
answer = None
with open(path) as file:
for line in file:
data = [*map(int, line.split())]
freq = Counter(data) # частота появления чисел
if len(freq) == 5 and max(freq.values()) == 2 and freq[max(data)] == 1:
answer = sum(data)
break
print(answer)
Здесь мы исходим из предположения, что в каждой строке строго 7 чисел. Тогда нам достаточно проверить, что уникальных чисел 5, максимальная частота 2, а частота максимального числа равна 1.