Все таки, если есть желание использовать enumerate
, то вот так:
l = [[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
# функция одного прохода, до первого совпадения
# если совпадения не случилось, возвращает None
def find_index_2D(l:list, value:int) -> dict:
for row, sublist in enumerate(l):
if (bool(set(sublist) & {value})):
return {"row":row, "column":sublist.index(value)}
Но если заглянуть в документацию по enumerate, то можно увидеть, что реализация и эквивалент достаточно просты:
# эквивалент
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
то есть можно определить свое n
без enumerate
и увеличивать с каждым шагом for
. То есть, вот так писать тоже нет ничего зазорного:
def find_index_2D(l:list, value:int) -> dict:
n = 0
for sublist in l:
if (bool(set(sublist) & {value})):
return {"row":n, "column":sublist.index(value)}
n += 1
akyo pipi
Ученик
(98),
закрыт
7 месяцев назад
[83, 5, -4, 39]
[91, 96, 44, 17]
[-6, 99, 62, 74]
[21, -10, 84, 27]
Допустим, есть такой массив. Нужно вывести все элементы массива больше числа 54 и их индексы. Если с элементами всё ещё понятно, то как вывести ещё и их индексы?
И как вообще выглядит индекс двумерного массива ([1,2] или просто условно 5)?
Всем заранее спасибо
Примечание к заданию: нельзя использовать стандартные функции такие как мин, макс,суммы и т.д. для нахождения искомых величин следует использовать циклы
Vitness
Просветленный
(32688)
7 месяцев назад
Если просто доставать элемент из массива двумерного, то так:
some_list[index1][index2]
Например для твоего списка – some_list[3][1] это -10
Как выводить – должно быть сказано в самом задании, никакого общего принципа нет.
Если с элементами всё ещё понятно, то как вывести ещё и их индексы?
Так же, как и элементы. Сохранять нужный индекс и выводить
Алексей Хвостовский
Мудрец
(18076)
7 месяцев назад
Индексы выглядят так:Если прям сильно-сильно приглядеться (ну или хоть раз на уроке математики присутствовать), то видно, что в индексе сначала указывается строка, а за ней столбец.
mtx = [[83, 5, -4, 39] ,[91, 96, 44, 17], [-6, 99, 62, 74], [21, -10, 84, 27]]
for row in mtx: print(*row)
for row in range(len(mtx)):
for col in range(len(mtx[row])):
if mtx[row][col] > 54:
print(f'{mtx[row][col]} ({row}, {col})')
Могу предложить такой вариант:
l = [[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
index = 0
index2 =0
for i in l:
try:
index2 = i.index(1)
except ValueError:
index2 = -1
if index2 != -1:
break
index += 1
print(index)
print(index2)
→ Ссылка
Автор решения: S. Nick
Как вариант:
l = [[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
ind = [ [i, _list.index(1)] for i,_list in enumerate(l) if 1 in l[i] ]
print(*ind)
→ Ссылка
Автор решения: Exe
import numpy as np
l = np.array([[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
print(np.where(l==1))
Вывод:
(array([1], dtype=int64), array([2], dtype=int64))
array([1], dtype=int64) – индекс строки
array([2], dtype=int64)) – индекс столбца
print(l[np.where(l==1)])
[1]
→ Ссылка
Автор решения: vp_arth
l = [[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
index = [item for sublist in l for item in sublist].index(1)
row, col = index//4, index % 4
print(index, row, col) # 6 1 2
→ Ссылка
Автор решения: Алексей Белкин
def getInd(list_in_list, value):
for index_list, valuelist in enumerate(list_in_list):
if value == valuelist[2]:
return index_list
else:
print('Не нашел')
→ Ссылка
Автор решения: Dmitry
Все таки, если есть желание использовать enumerate
, то вот так:
l = [[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
# функция одного прохода, до первого совпадения
# если совпадения не случилось, возвращает None
def find_index_2D(l:list, value:int) -> dict:
for row, sublist in enumerate(l):
if (bool(set(sublist) & {value})):
return {"row":row, "column":sublist.index(value)}
Но если заглянуть в документацию по enumerate, то можно увидеть, что реализация и эквивалент достаточно просты:
# эквивалент
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
то есть можно определить свое n
без enumerate
и увеличивать с каждым шагом for
. То есть, вот так писать тоже нет ничего зазорного:
def find_index_2D(l:list, value:int) -> dict:
n = 0
for sublist in l:
if (bool(set(sublist) & {value})):
return {"row":n, "column":sublist.index(value)}
n += 1
→ Ссылка
Автор решения: Алексей Белкин
Ну я вопрос понял что 1 ищут именно в этой позиции. А если без разницы в какой позиции то тогда:
def getInd(list_in_list, value):
for index_list, valuelist in enumerate(list_in_list):
for searchvalue in valuelist:
if searchvalue == value:
return index_list
else:
return ('Не нашел')
→ Ссылка
Автор решения: moondust
Мне что то подсказывает, что тебе нужно будет вывести не только индекс, но и ряд, каком находится нужное число.
l = [[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 0]]
row = 1
for f in l:
for num in f:
if num == 1:
print('index:', (f.index(1)))
print('row:', row)
break
row += 1
→ Ссылка
Автор решения: gintaras.martinaitis
import numpy as np
l = [[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
YX = np.where( l == 1 )
#(array([1], dtype=int32), array([2], dtype=int32))
Y = YX[ 0 ][0] #Y = 1
X = YX[ 1 ][0] #X = 2
проверяем
print( l[ Y, X ] )
[1.]
print( l[ Y, X ][0] )
1.0
Дла двумерного массивв np.where( массив = число ) вернет кортеж ( Y, X ) поправил ответ добавил [0] чтобы получить число а не массив 1X1
→ Ссылка
[ тот самый код ]
def count_neighbours(grid, row, col): # [row] - ряд
# [col] - столбец
mass_el_1 = []
grid1 = np.array(grid)
mass8 = [(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)]
mass3 = [(0,4),(4,4),(4,0),(0,0)]
mass5 = [(1,0),(2,0),(3,0),(0,1),(0,2),(0,3),(1,4),(2,4),(3,4),(4,1),(4,2),(4,3)]
xl = []
yl = []
for x in range(grid1.shape[0]):
for y in range(grid1.shape[1]):
if grid1[x, y] != 0:
print (x, y)
xl.append(x)
yl.append(y)
print(xl)
print(yl)
listindex = list(zip(xl,yl))
print(listindex)
xlll = []
ylll = []
neighbours = []
exepts = []
for x in range(grid1.shape[0]):
for y in range(grid1.shape[1]):
if grid1[x, y] != 0:
for i in listindex:
print('i: ',i)
for i1 in mass8:
print('i1: ',i1)
if i == i1:
try:
if grid1[x-1, y-1] == 1:
neighbours.append((x-1, y-1))
elif grid1[x, y-1] == 1:
neighbours.append((x, y-1))
elif grid1[x+1, y-1] == 1:
neighbours.append((x+1, y-1))
elif grid1[x+1, y] == 1:
neighbours.append((x+1, y))
elif grid1[x+1, y+1] == 1:
neighbours.append((x+1, y+1))
elif grid1[x, y+1] == 1:
neighbours.append((x, y+1))
elif grid1[x-1, y+1] == 1:
neighbours.append((x-1, y+1))
elif grid1[x-1, y] == 1:
neighbours.append((x-1, y))
except IndexError :
exepts.append((x,y))
print(neighbours,"len:",len(neighbours))
print(exepts,"len:",len(exepts))
count_neighbours(((1, 0, 0, 1, 0),
(0, 1, 0, 0, 0),
(0, 0, 1, 0, 1),
(1, 0, 0, 0, 0),
(0, 0, 1, 0, 0),),0,0)
Иногда нам приходится использовать таблицы с данными для решения своих задач. Такие таблицы называются матрицами или двумерными массивами.
В Python подобные таблицы можно представить в виде списка, элементы которого являются другими списками. Для примера создадим таблицу с тремя столбцами и тремя строками, заполненными произвольными буквами:
mas = [['й', 'ц', 'у'], ['к','е','н'], ['г', 'ш', 'щ']] #Вывод всего двумерного массива print(mas) #Вывод первого элемента в первой строке print(mas[0][0]) # Выведет й #Вывод третьего элемента в третьей строке print(mas[2][2]) # Выведет щ
Создание двумерных массивов
Создать такой массив в Python можно разными способами. Разберем первый:
# Создание таблицы с размером 3x3, заполненной нулями a = 3 mas = [0] * a for i in range(a): mas[i] = [0] * a print(mas) # Выведет [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
Второй способ предполагает создание пустого списка с добавлением в него новых списков. Рассмотрим на примере:
# Создание таблицы с размером 2x2, заполненной единицами
a = 2 mas = [] for i in range(a): mas.append([0] * a) print(mas) # Выведет [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
Третьим и самым простым способом является генератор списков с x строками, которые будут состоять из y элементов. Пример:
# Создание таблицы с размером 3x3, заполненной двойками a = 3 mas = [[2] * a for i in range(a)] print(mas) # Выведет [[2, 2, 2], [2, 2, 2], [2, 2, 2]]
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Способы ввода двумерных массивов
Допустим, нам нужно ввести двумерный массив после запуска нашей программы. Для этого мы можем создать программу, которая будет построчно считывать значения нашего массива, а также количество строк в нем. Рассмотрим на примере:
a=int(input()) mas = [] for i in range(a): mas.append(list(map(int, input().split()))) print(mas)
Запускаем программу и сначала вводим количество строк в массиве (допустим, 3). Далее вводим строки в порядке их очереди. Например:
1 1 1 1 1 1 1 1 1
После этого данная программа выведет наш двумерный массив: [[1, 1, 1], [1, 1, 1], [1, 1, 1]].
То же самое можно сделать с помощью генератора двумерных массивов:
mas = [list(map(int, input().split())) for i in range(int(input()))] # Вводим 3 1 1 1 1 1 1 1 1 1 print(mas) # Выведет [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
Вывод двумерных массивов
Для обработки и вывода списков используются два вложенных цикла. Первый цикл – по порядковому номеру строки, второй – по ее элементам. Например, вывести массив можно так:
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in range(0, len(mas)): for i2 in range(0, len(mas[i])): print(mas[i][i2], end=' ') print() # Выведет 1 1 1 1 1 1 1 1 1
То же самое можно сделать не по индексам, а по значениям массива:
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in mas: for i2 in i: print(i2, end=' ') print() # Выведет 1 1 1 1 1 1 1 1 1
Способ с использованием метода join():
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in mas: print(' '.join(list(map(str, i)))) # Выведет 1 1 1 1 1 1 1 1 1
Вывод одной из строк двумерного массива можно осуществить с помощью цикла и того же метода join(). Для примера выведем вторую строку в произвольном двумерном массиве:
mas = [[1, 1, 1], [2, 2, 2], [3, 3, 3]] string = 2 for i in mas[string-1]: print(i, end=' ') # Выведет 1 1 1
Для вывода определенного столбца в двумерном массиве можно использовать такую программу:
mas = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] column = 2 for i in mas: print(i[column-1], end=' ') # Выведет 2 5 8
Обработка двумерных массивов
Составим произвольный двумерный массив с числами и размерностью 4×4:
2 4 7 3 4 5 6 9 1 0 4 2 7 8 4 7
Теперь поставим числа в каждой строке по порядку:
mas = [[2, 4, 7, 3], [4, 5, 6, 9], [1, 0, 4, 2], [7, 8, 4, 7]] mas2 = [] for i in mas: mas2.append(sorted(i)) print(mas2) # Выведет [[2, 3, 4, 7], [4, 5, 6, 9], [0, 1, 2, 4], [4, 7, 7, 8]]
А теперь расставим все числа по порядку, вне зависимости от их нахождения в определенной строке:
mas = [[2, 4, 7, 3], [4, 5, 6, 9], [1, 0, 4, 2], [7, 8, 4, 7]] mas2 = [] for i in mas: for i2 in i: mas2.append(i2) mas=sorted(mas2) for x in range(0, len(mas), 4): e_c = mas[x : 4 + x] if len(e_c) < 4: e_c = e_c + [None for y in range(n - len(e_c))] print(list(e_c)) # Выведет [0, 1, 2, 2] [3, 4, 4, 4] [4, 5, 6, 7] [7, 7, 8, 9]
Итог
Мы разобрались в основах двумерных массивов в Python, научились создавать, вводить и выводить их, а также рассмотрели примеры обработки. Надеюсь, статья оказалась полезной для вас!