Biorąc pod uwagę niektóre macierzy, muszę odzwierciedlić wszystkie wiersze w macierzy. Na przykładDublowanie wierszy w macierzy za pomocą pętli/rekursji?
[[2, 1],
[4, 3]]
staną
[[1, 2],
[3, 4]]
udało mi się zrobić to dla (2 x 2) -case. Ale mam kłopoty mirroring coś takiego:
[[1, 2, 3, 4],
[1, 2, 3, 4]]
To musi stać
[[4, 3, 2, 1],
[4, 3, 2, 1]]
Chcę to zrobić z pętli/rekursji. Gdybym użył rekursji, prawdopodobnie miałbym taki podstawowy krok, że większość elementów wewnętrznych zostanie zamieniona jako pierwsza, a następnie od tego momentu zwiększy się rozmiar macierzy, włączając również elementy zewnętrzne i zamieniamy je również. Mam jednak problem z krokiem rekursji. Po zamianie najbardziej wewnętrznych elementów, chciałbym umieścić obok siebie większość wewnętrznych elementów w macierzy, a także zamienić je, a następnie kontynuować tak, aż dotrzemy do zewnętrznych elementów. Jak można to zaimplementować w kodzie? Oto, co zrobiłem do tej pory:
matrix = [[1, 2, 3, 4],
[1, 2, 3, 4]]
def mirror(matrix):
# This corresponds to the basic step. The two inner most elements get swapped.
if len(matrix) == 2:
for i in range(len(matrix)):
for j in range(len(matrix)):
# Store one element in a temporal variable
temp = matrix[i][j]
matrix[i][j] = matrix[i][len(matrix) - 1]
matrix[i][len(matrix)-1] = temp
return matrix
else:
# Recursion step
for i in range(len(matrix)):
for j in range(len(matrix)):
return (matrix + mirror(matrix[(len(matrix) // 2) - 1 : len(matrix)]))
Krok rekursji jest źle Myślę. Próbowałem użyć operatora plastra, ale nie jestem pewien, jak to zrobić poprawnie. Każda pomoc z tym problemem byłaby doceniona.
to ma być rekurencyjne? –
Cóż, w Pythonie analizowałem tylko pętle, rekurencję, listy, algorytmy wyszukiwania i funkcje. Tak więc na podstawie mojej ograniczonej wiedzy myślę, że rekurencja jest najłatwiejszym/najskuteczniejszym sposobem rozwiązania tego problemu. – Kamil
'[sub [:: - 1] dla sub w arr]' jest najprostszym rozwiązaniem, czy chcesz zmienić oryginalną tablicę? –