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().