Как вкладывать стоимость, помещенную в нечетных положениях внутри списка?

Моя консультация - следующая.

У меня есть список со стоимостью: [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

У меня нет идеи как я удается изменить первый, я заносит в список без необходимости использовать второй список. И в случае когда использует второй список: как он мог бы добавлять стоимость в положениях ты рожаешь уже заблаговременно введенные в компьютер?.

2
задан 06.11.2019, 04:10
2 ответа

ты можешь использовать оператор бита ~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]

, должен давать тебе тот же результат

1
ответ дан 01.12.2019, 12:38
  • 1
    Muchí пропасти спасибо! хотя он подает меня как resolució n и чтобы понимать лучше язык, не podré применяться, так как todaví в vimos оператор [~] и использовав это я darí an из-за инвалида упражнение! Привет – Ezequiel123 06.11.2019, 00:58
  • 2
    я издаю ее тебе без этой команды – Luis Alejandro 06.11.2019, 00:59

Хотя это не главное твоего вопроса, в тебе 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)
0
ответ дан 01.12.2019, 12:38
  • 1
    Большое спасибо! Это очень хороший и простой способ решать упражнение, хотя я не смогу применять это, так как todaví в в классе мы не увидели inserció n mó dulos, но я тебе благодарен за время это в помогании мне решать! Привет – Ezequiel123 06.11.2019, 01:00