Dada una array, invierta cada sub-array formada por k elementos consecutivos.
Ejemplos:
Input: arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] k = 3 Output: [3, 2, 1, 6, 5, 4, 9, 8, 7] Input: arr = [1, 2, 3, 4, 5, 6, 7, 8] k = 5 Output: [5, 4, 3, 2, 1, 8, 7, 6] Input: arr = [1, 2, 3, 4, 5, 6] k = 1 Output: [1, 2, 3, 4, 5, 6] Input: arr = [1, 2, 3, 4, 5, 6, 7, 8] k = 10 Output: [8, 7, 6, 5, 4, 3, 2, 1]
Tenemos una solución existente para este problema, consulte Invierta una array en grupos de enlace de tamaño dado. Podemos resolver este problema rápidamente en Python usando el corte de listas y la función invertida(). El siguiente ejemplo le dará una mejor comprensión del enfoque.
Ejemplo:
# function to Reverse an array in groups of given size def reverseGroup(input,k): # set starting index at 0 start = 0 # run a while loop len(input)/k times # because there will be len(input)/k number # of groups of size k result = [] while (start<len(input)): # if length of group is less than k # that means we are left with only last # group reverse remaining elements if len(input[start:])<k: result = result + list(reversed(input[start:])) break # select current group of size of k # reverse it and concatenate result = result + list(reversed(input[start:start + k])) start = start + k print(result) # Driver program if __name__ == "__main__": input = [1, 2, 3, 4, 5, 6, 7, 8] k = 5 reverseGroup(input,k)
Producción:
[5, 4, 3, 2, 1, 8, 7, 6]
Uso de la función directa
# function to Reverse an array in groups of given size def reverseGroup(a, k): # take an empty list res = [] # iterate over the list with increment of # k times in each iteration for i in range(0, len(a), k): # reverse the list in each iteration over # span of k elements using extend res.extend((a[i:i + k])[::-1]) print(res) # Driver program if __name__ == "__main__": input = [1, 2, 3, 4, 5, 6, 7, 8] k = 5 reverseGroup(input, k)
Producción:
[5, 4, 3, 2, 1, 8, 7, 6]
Publicación traducida automáticamente
Artículo escrito por Shashank Mishra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA