Другой подход заключается в рассмотрении использования фрейма данных pandas.
import pandas as pd
Создайте кадр данных из списка чисел следующим образом:
df = pd.DataFrame([
[3, 2, 2, 1, 4],
[3, 2, 2, 7, 4],
[8, 2, 2, 1, 3],
[8, 8, 9, 9, 9],
[8, 8, 1, 5, 1]
])
Затем вы используете цикл for для проверки каждого числа 1-9 (я предполагаю, что 0 нев вашем списке?) и в цикле for вы удаляете строки и столбцы, в которых нет проверяемого числа.Если результирующий кадр действительно является прямоугольником, то не должно быть никакого присутствия NaN.
Например, результирующий кадр цифры 1 выглядит следующим образом:
2 3 4
0 NaN 1.0 NaN
2 NaN 1.0 NaN
4 1.0 NaN 1.0
В то время как результирующий кадр цифры 2 выглядит следующим образом:
1 2
0 2.0 2.0
1 2.0 2.0
2 2.0 2.0
Проверка наличия NaN ==0 и у тебя будет прямоугольник.Вы также должны убедиться, что размер поля не равен нулю, так как это означает, что число отсутствует.Вот код:
result = []
for num in range(1, 10):
df_dna = df[df == num].dropna(how="all", axis=0).dropna(how="all", axis=1)
if df_dna.isnull().sum().sum() == 0 and df_dna.size != 0:
result.append(num)
print("The numbers that form rectangles are:", result)
И ваш результат выглядит так:
The numbers that form rectangles are: [2, 4, 5, 7, 9]