python — Симметричная ли матрица?

Давайте разбираться постепенно.

Вы не выводите «no»:

n = int(input())
a = []
for i in range(n):
    a.append(list(map(int, input().split())))
for i in range (len(a)):
    for j in range (len(a[i])):
        if a[i][j]!=a[j][i]:
            print("no")  #  break
            break  #  print("no")
print("yes")

В ряде случаев, Вы будете дважды выводить «no». Поэтому следует использовать дополнительный флаг:

n = int(input())
a = []
for i in range(n):
    a.append(list(map(int, input().split()))) 
stop = False
for i in range (len(a)):
    for j in range (len(a[i])):
        if a[i][j]!=a[j][i]:
            print("no")
            stop = True
            break
    if stop:
        break
print("yes")

В заключение, не следует выводить после «no», «yes»:

n = int(input())
a = []
for i in range(n):
    a.append(list(map(int, input().split()))) 
stop = False
for i in range (len(a)):
    for j in range (len(a[i])):
        if a[i][j]!=a[j][i]:
            print("no")
            stop = True
            break
    if stop:
        break
if not stop:
    print("yes")

Используйте одну переменную в коде для обозначения размерности. Так улучшается читаемость:

n = int(input())
a = []
for i in range(n):
    a.append(list(map(int, input().split()))) 
stop = False
for i in range(n):
    for j in range(n):
        if a[i][j] != a[j][i]:
            print("no")
            stop = True
            break
    if stop:
        break
if not stop:
    print("yes")

Пользуйтесь функциями. Тогда отпадёт надобность в сложных конструкциях с флагами:

def read_matrix():
    n = int(input())
    a = []
    for i in range(n):
        a.append(list(map(int, input().split()))) 
    return a
def is_symmetry(a):
    n = len(a)
    for i in range(n):
        for j in range(n):
            if a[i][j] != a[j][i]:
                return False
    return True
a = read_matrix()
s = is_symmetry()
if s:
   print("yes")
else:
   print("no")

Ещё раз пользуйтесь функциями:

def read_matrix():
    n = int(input())
    a = []
    for i in range(n):
        a.append(list(map(int, input().split()))) 
    return a   
def is_row_correct(a, i, j):
    n = len(a)
    for j in range(n):
        if a[i][j] == a[j][i]:
            continue
        return False
    return True
         
def is_symmetry(a):
    n = len(a)
    for i in range(n):
        correct = is_row_correct(a, i, j)
        if not correct:
           return False
    return True
a = read_matrix()
s = is_symmetry()
if s:
   print("yes")
else:
   print("no")

Чего добились? Можем делать библиотеку. Например:

import core
a = core.read_matrix()
s = core.is_symmetry()
if s:
   print("yes")
else:
   print("no")

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

def read_matrix():
    n = int(input())
    a = []
    for i in range(n):
        a.append(list(map(int, input().split()))) 
    return a   
def is_row_correct(a, i, j):
    n = len(a)
    for j in range(n):
        if a[i][j] == a[j][i]:
            continue
        return False
    return True
         
def is_symmetry(a):
    n = len(a)
    for i in range(n):
        correct = is_row_correct(a, i, j)
        if not correct:
           return False
    return True

python — Сортировка матрицы — Stack Overflow на русском

Вопрос задан

Изменён 2 года 4 месяца назад

Просмотрен 2k раза

Дана матрица n * m , нужно отсортировать и вывести колонками от самого маленького к самому большому, у меня не выходит сделать, смотреть ниже.

Мой код:

n , m = map(int,input().split())
matrix = [list(map(int,input().split())) for i in range(n)]
matrix_copy = copy.deepcopy(matrix)
li = []
for i in range(n):
    for j in range(m):
        li.append(matrix[i][j])
li.sort()
k = -1
for i in range(n):
    for j in range(m):
        k +=1
        matrix_copy[i][j] = li[k]
x = (list(zip(*matrix_copy)))
for i in x:
    print(*i)

Вход: n — количество строк, m- количество колонок, потом вводим матрицу нужного размера.

Как работает у меня:

input:
3 3
4 1 3
2 5 7
9 8 6
output:
1 4 7
2 5 8
3 6 9
input:
1 3
4 2 1
output:
1
2
4
input:
3 1
9
7
8
output:
7 8 9

Как должно быть:

input0:
3 3
4 1 3
2 5 7
9 8 6
output0:
1 4 7
2 5 8
3 6 9
input1:
1 3
4 2 1
output1:
1 2 4
input2:
3 1
9
7
8
output2:
7
8
9
  • python
  • python-3.x
  • сортировка
  • матрицы

6

Во второй части вашей программы (и частично и в первой) вы усложняете себе жизнь.

n, m = map(int,input().split())
matrix = [list(map(int,input().split())) for i in range(n)]
li = []
for i in range(n):
    for j in range(m):
        li.append(matrix[i][j])
li.sort()
# ------- дотуда (почти) ваш код, теперь мой --------
for i in range(n):
    for j in range(m):
        print(li[n * j + i], end=" ")
    print()

n * j + i просто индекс i-той строки и j-того столбца в вашем списке li.

2

Любое разумное решение будет следовать образцу: перевести матрицу в список, упорядочить список, расставить числа из списка в элементы матрицы. Но на Питоне есть пара трюков которые облегчают задачу.

Собрать матрицу можно в одну строку. Получится не список, а генератор:

itertools.chain.from_iterable(matrix)

Функция sorted принимает вход в том числе и генераторы, возвращает список.

Собрать матрицу из списка тоже можно в одну строку с помощью слайсов:

[lst[i::n] for i in range(n)]

Код целиком:

import itertools
def sorted_by_columns(matrix):
    n = len(matrix)
    lst = sorted(itertools. chain.from_iterable(matrix))
    return [lst[i::n] for i in range(n)]
def print_matrix(matrix):
    for r in matrix:
        print(*r)
def check(matrix):
    print('-' * 10)
    print_matrix(matrix)
    print('-')
    print_matrix(sorted_by_columns(matrix))
    print('-' * 10)
check([
    [4, 1, 3],
    [2, 5, 7],
    [9, 8, 6]
])
check([
    [4, 2, 1]
])
check([
    [9],
    [7],
    [8]
])

Результаты:

----------
4 1 3
2 5 7
9 8 6
-
1 4 7
2 5 8
3 6 9
----------
----------
4 2 1
-
1 2 4
----------
----------
9
7
8
-
7
8
9
----------

1

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

python — с использованием карты (int, raw_input().

split())

спросил

Изменено 4 года, 7 месяцев назад

Просмотрено 97 тысяч раз

Хотя мне очень нравится Python, когда мне нужно получить несколько целочисленных входных данных в одной строке, я предпочитаю C/C++. Если я использую Python, я использую:

 а = карта (целое, raw_input().split())
 

Это единственный способ или есть какой-нибудь питонический способ сделать это? И дорого ли это стоит с точки зрения времени?

  • питон
  • словарь
  • необработанный ввод

4

Список включений!

Интуитивный и питонический:

 a = [int(i) for i in raw_input().split()]
 

Ознакомьтесь с этим обсуждением здесь: Понимание списка Python против. Карта

Если вы используете карту со встроенной функцией, она может быть немного быстрее, чем LC:

 >>> strs = " ".join(str(x) for x in xrange(10**5))
>>> %timeit [int(x) для x в strs.split()]
1 цикл, лучший из 3: 111 мс на цикл
>
>> %timeit map(int, strs.split()) 1 цикл, лучший из 3: 105 мс на цикл

С пользовательской функцией:

 >>> def func(x):
... вернуть целое (х)
>>> %timeit map(func, strs.split())
1 петля, изн 3: 129мс на цикл
>>> %timeit [func(x) для x в strs.split()]
1 цикл, лучший из 3: 128 мс на цикл
 

Сравнение Python 3.3.1:

 >>> strs = " ".join([str(x) for x in range(10**5)])
>>> %timeit list(map(int, strs.split()))
10 циклов, лучший из 3: 59 мс на цикл
>>> %timeit [int(x) для x в strs.split()]
10 циклов, лучший из 3: 79,2 мс на цикл
>>> Функция определения (x):
    вернуть целое (х)
...
>>> %timeit list(map(func, strs.split()))
10 петель, ЛС 3:94,6 мс на цикл
>>> %timeit [func(x) для x в strs.split()]
1 цикл, лучший из 3: 92 мс на цикл
 

Со страницы с советами по производительности Python:

Единственным ограничением является то, что «тело цикла» карты должно быть функцией вызов. Помимо синтаксического преимущества спискового понимания, они часто так же быстро или быстрее, чем эквивалентное использование карты.

7

Вы можете использовать это:

 s = raw_input().split()
s = [int(i) для i в s]
 
 пары по умолчанию (a,k):
  ответ = 0
  с = набор (а)
  для v в s:
    если v+k в s:
        ответ += 1
  вернуть ответ
n, k = карта (int, raw_input().split())
b = карта (целое, raw_input().split())
печатать пары (b, k)
 

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

list(map(int, input().

strip().split()[:I])) | by numankaya

İlk olarak bu ifadede kullanılan methodları ve fonksiyonları örnekler ile kısaca açıklayacağım.

Kendisi herhangi bir string değeri integer değere çevirmek için kullanılan önceden tanımlanmış bir fonksiyondur.

Bir diğer fonksiyonumuz kullanıcıdan girdi almak için kullanılmaktadır. Örneğin, birisine ismini sorduğunuzu düşünün. Burada input fonksiyonunu kullanarak karşı tarafın size ismini söylemesini talep ediyorsunuz. Girilen ismi daha sonra kullanmak için “kullanıcı_adı” gibi bir değişken belirleyip ismi bu değişkene(kullanıcı_adı) atayabilirsiniz.

 kullanıcı_adı = input(“isminiz nedir?”) 
print(“Merhaba” + kullanıcı_adı)D
#bu programı çalıştırdığınızda(run) şöyle bir sonuçla karşılacaksınızınızınızınızınızda(run)
>исминиз недир? numan
>Merhaba numan

Строка değerin başındaki(начальный) ve sonundaki(конечный) karakterleri(boşluk gibi) kaldırmak(удалить) için yaygın olarak kullanılmaktadır.

önünde ve sonunda boşluk(пробел) bulunan bir string değerimiz olsun

  string = “numan” 
yeni_string = string.strip()
print(new_string)
çıktı(output):
«numan»

split() methodu string değeri list dönüştürmek(convert) için kullanılır.

şöyle bir string değerimiz olsun

  string = «numan» 
print(string.split())
çıktı:
[“n”, “u”, “m”, “a”, “n”]

синтаксис = карта (функция, * iterables)
iterables => Yinelenebilir, elemanlarını teker teker döndürebilen ve bir for-döngüde yinelenmesine izin veren herhangi bir Python nesnesidir. Bilinen yinelenebilir örnekler arasında listeler, tuplelar ve dizeler bulunur; bu tarzda herhangi bir dizi, bir döngü içinde yinelenebilir.

Mesela bir listeki bütün degerlerin karesini(x²) almak istiyoruz.

 liste = [1, 2, 3] 
kare_liste = list(map(lambda a: a**2, *liste))
çıktı:
[1, 4, 9]

Son olarak da dilimleme kısmına bir göz аталым.

 s = [1, 2, 3, 4] 
print(s[0: 3])
çıktı:
[1, 2, 3, 4] #bütün degerleri kapsayan bir ifade kullandım.
#Eğer 3 yerine farklı bir değer kullanırsam
print(s[0:2]) #son değeri dahil etmiyorum.
число:
[1, 2, 3]

Şimdi asıl Problemimize gelelim.
İfade:
list(map(int, input(). strip().split())) [:I]
Aşağıdaki bu ifadeye çok benzeyen bir örnek

Diyelim ki kullanıcıdan bir string input istiyorsunuz ve bu inputun integer listini döndüreceksiniz (возврат).

 n = int(input(“listenin uzunluğunu belirlemek için bir değer girin”) 
string = input(“bir string değer gir: “)
#eğer kullanıcı 5 sayısını girse string değer şöyle olsun “ ” 9
#şimdi strip() methodu ile bu string değerdeki boşluklardan kurtulacağız.
yeni_string = string.strip() #baştaki ve sondaki boşlukları kaldırdıkyeni_string.split() # список строк, содержащий список.
#["1", "2", "3", "4", "5"]
 input().