Моя консультация - следующая.
У меня есть список со стоимостью: [1,2,3,4,5,6,7,8,9]
И я нуждаюсь в том, чтобы вложить ту стоимость, помещенную в нечетных положениях для того, чтобы это осталось так: [9,2,7,4,5,6,3,8,1]
До настоящего времени то, чего он добивается, является следующим:
#Funcion
def imprimirlista(vec):
largo= len(vec)
for i in range(largo):
print (vec[i], end= " ")
print()
def listaimparesinvertida(vec,vec2):
vec2 = vec[::2]
vec2 = vec2[::-1]
largo= len(vec2)
for i in range(largo):
print (vec2[i], end= " ")
print()
#programa principal
v = []
v2= []
n= int(input("Ingrese dato: "))
while n != -1:
v.append(n)
n= int(input("Ingrese dato: "))
imprimirlista(v)
listaimparesinvertida(v,v2)
Что производит меня как вывод:
Ingrese dato: 1
Ingrese dato: 2
Ingrese dato: 3
Ingrese dato: 4
Ingrese dato: 5
Ingrese dato: 6
Ingrese dato: 7
Ingrese dato: 8
Ingrese dato: 9
Ingrese dato: -1
1 2 3 4 5 6 7 8 9
9 7 5 3 1
У меня нет идеи как я удается изменить первый, я заносит в список без необходимости использовать второй список. И в случае когда использует второй список: как он мог бы добавлять стоимость в положениях ты рожаешь уже заблаговременно введенные в компьютер?.
ты можешь использовать оператор бита ~x
, который возвращает -x-1
, таким образом можешь повторять список обратного способа, примера
a = [1,2,3,4,5]
for i in range(a):
a[~i]
mostrarГЎ
5 4 3 2 1
зная это только лишенным пробегать список и обмениваться стоимостью, для этого у списка должен быть один tamaГ±o нечетный, из-за чего того, чтобы быть парой tendrГЎ, чем удалять стоимость.
valor_extra = None
a = [1,2,3,4,5,6,7,8,9]
# Si la lista tiene tamaño par le quitamos el ultimo pero lo guardaremos
if len(a)%2==0:
valor_extra = a[-1]
a = a[:-1]
# Ahora solo debemos recorrer la lista y reasignar valores
# solo se debe recorrer la mitad de la lista
# ya que de recorrerse completamente quedaria igual
# porque volveríamos a sustituir los valores de nuevo
for i in range(len(a)//2):
if i%2==0:
a[i], a[~i] = a[~i], a[i]
# Ahora solo queda agregar el valor que le quitamos en caso de ser necesario
if valor_extra:
a += [valor_extra]
print(a)
полученный
[9, 2, 7, 4, 5, 6, 3, 8, 1]
- форма, которая приходит в голову мне haciГ©ndolo с единственным списком,
, ИЗДАННЫЕ
, Чтобы не использовать только грубые ~
несмотря на то, что Это заменять на len(a)-i-1
valor_extra = None
a = [1,2,3,4,5,6,7,8,9]
if len(a)%2==0:
valor_extra = a[-1]
a = a[:-1]
for i in range(len(a)//2):
if i%2==0:
a[i], a[len(a)-i-1] = a[len(a)-i-1], a[i]
if valor_extra:
a += [valor_extra]
, должен давать тебе тот же результат
Хотя это не главное твоего вопроса, в тебе cГіdigo она funciГіn печатать podrГ-туз менять ее на простого print(*v, end=' ')
, что harГ - в то же самое.
Она funciГіn listaimparesinvertida()
ты можешь получать ее с модулем itertools
из следующей формы:
from itertools import chain, zip_longest
def listaimparesinvertida(vec):
lista1 = vec[1::2] # Esto sería [2, 4, 6, 8]
lista2 = vec[::-2] # Esto sería [9, 7, 5, 3, 1]
print([i for i in chain(*zip_longest(lista1, lista2)) if i is not None])
listaimparesinvertida(v)
Это devolverГ - в [9, 2, 7, 4, 5, 6, 3, 8, 1]
AclaraciГіn
zip_longest
из itertools
функционирует равно как zip()
только, что, вместо того, чтобы None
удаляет излишки в списках различного tamaГ±o, aГ±ade, а следовательно в этом случае zip_longest(lista1, lista2)
он возвращает [(9, 2), (7, 4), (5, 6), (3, 8), (1, None)]
. ahГ - if i is not None
.
Без importaciГіn mГіdulos
Другой способ, не импортируя itertools
serГ, - когда элементы None
создавать список с n и идти asignГЎndoselos:
def listaimparesinvertida(vec):
resultado = len(vec) * [None]
resultado[1::2] = vec[1::2]
resultado[::2] = vec[::-2]
print(resultado)