Python

Задача для Python. Работа с массивом чисел в файле.

1) Сгенерировать и записать 50 случайных чисел в файл (числа должны быть равны от 1 до 50).
2) После этого найти и записать в файл самое часто встречающееся число и кол-во раз, которое оно повторяется (если таких несколько, то и вывести соответственно несколько).
3) Затем записать в файл исходный массив чисел (из шага 1) БЕЗ УЧЁТА часто встречающихся (из шага 2).
import random
fo=open("50.txt", "w")
fo.write(str([random.randint(1,50) for i in range (50)]).strip('[]'))
fo.close()

fi=open("50.txt", "r")
s= fi.readline()
fi.close()

s=list(map(int, s.split(',')))
c=sorted([[s.count(i),i] for i in set(s)], reverse=True)

fo=open("50.txt", "a")
fo.write('\n')
m,b=c[0][0],[]
for i in c:
~~if i[0]<m: break
~~fo.write(str(i[1])+' '+str(i[0])+'\n')
~~b.append(i[1])

fo.write(str([i for i in s if i not in b]).strip('[]'))
fo.close()
АБ
Александр Барбачаков
72 035
Лучший ответ
Это можно сделать по разному. Предлагаю так:
from random import randint as r
a=[r(1,50) for i in range(50)]
print(a); max,c=0,[]
for i in range(50):
~~m=a.count(a[i])
~~if m > max: max=m; c=[a[i]]
~~if m==max and a[i] not in c:
~~~~c.append(a[i])
print(c)
for b in c:
~~for i in range(a.count(b)): a.remove(b)
print(a)
f.open('/sdcard/texto.txt','w')
for b in a: f.write(str(b)+'\n')
f.close()
Итак, массив сформирован и напечатан, элементы массива с максимальным количеством вхождений найдены, выведены на экран в виде списка а затем удалены из начального списка, который в таком обновлённом виде записан во внешний файл в виде текста, причём каждый элемент с новой строки. Название директория файла можно изменить на любое другое подходящее имя. Кстати, функция print - это тоже запись в файл вывода (на консоль !), а в задании не сказано, что файл во всех случаях внешний и один и тот же. А что записано в последнем файле можно будет посмотреть при помощи файлового редактора.
#1
import random
with open('f1.txt','w') as f:
~~~~A = [random.randint(1,50) for _ in range(50)]
~~~~print(*A, file=f)

#2
with open('f1.txt') as f:
~~~~A = list(map(int, f.read().split()))
~~~~nmx = max(A.count(a) for a in A)
~~~~B = {a for a in A if A.count(a) == nmx}
~~~~with open('f2.txt', 'w') as fw:
~~~~~~~~print(*B, file=fw)
~~~~~~~~print(nmx, file=fw)

#3
with open('f1.txt') as f:
~~~~A = list(map(int, f.read().split()))
~~~~nmx = max(A.count(a) for a in A)
~~~~B = {a for a in A if A.count(a) == nmx}
~~~~A = [a for a in A if a not in B]
~~~~with open('f3.txt', 'w') as fw:
~~~~~~~~print(*A, file=fw)
WK
Wawan Krohin
21 729