Как удваивание элементов списка исключая концы в python

У меня есть следующие списки в python

lista_x = [2,3,4,5]
lista_y = [6,7,8,9]

Я пробую отвечать настоящий элемент (исключая концы) на следующее положение. Так что он получил что-то сходное с этим:

lista_x = [2,3,3,4,4,5]
lista_y = [6,7,7,8,8,9]

У меня есть этот код, но я не смог добиваться моей цели

for i in range(len(lista_x)):
    if(i != 0 and i!=len(lista_x)):    #Exluyendo extremos
        lista_x.insert(i,lista_x[i])    #Agrega el valor actual 
        lista_y.insert(i,lista_y[i])
7
задан 26.09.2016, 02:39
4 ответа

Этот вопрос кажется tratase упражнением, которое он ищет, что ты получил изобретательное решение выдвинутой проблемы.

В общем, когда бук, который обрабатывать список, первое, что ты должен знать, это различные методы и функции, которые действуют со списками, и искать, если какой-либо из них может serte утилиты. Один из самых могущественных zip с тем, который ты можешь перемешивать списки. С немного зоркости, возможно видеть, что, если ты делаешь один zip списка с собой самим, ты можешь прибывать во что-то очень предстоящее, во что ты нуждаешься:

>> lista = [2, 3, 4, 5]
>> resultado = zip(lista, lista[1:])

Результат:

>> print(list(resultado))
[(2, 3), (3, 4), (4, 5)]

То, чего нет, состоит в том, чтобы прилагать все эти tuplas и ты получил бы решение. Чтобы прилагать ты мог бы создавать цикл, который добавлял каждый tupla, но есть другая более прямая форма используя функцию sum:

sum(zip(lista, lista[1:]), ())

Начальный элемент - пустой tupla () в который приложено (слагаемое) tuplas, которые мы получаем посредством zip чтобы получать tupla. Как они просят у нас список, будет нужно превращать tupla в список.

Помещая все в Ваш сайт, решение:

resultado = list(sum(zip(lista, lista[1:]), ()))
9
ответ дан 24.11.2019, 13:17
  • 1
    Очень довольно утомленный +1 – miso 26.09.2016, 03:30
  • 2
    Превосходный, большое спасибо из-за твоего объяснения метода zip. – Carlos Cardoso 26.09.2016, 04:11

Чтобы жизнь не осложняйтесь, верьте одна funciГіn в, что пробежал список со второй posiciГіn до нее перед последней posiciГіn. Это делается размещая despuГ©s списка между ключами [1:-1]. Этим синтаксисом то, что он обозначает, состоит в том, чтобы был скопирован список со второй posiciГіn до конца, исключая Гєltimo статья.

Помнит, что в Пайтоне индексы начинаются с 0, так что вторая posiciГіn - 1.

-1 был бы последней posiciГіn

Используя mГ©todo append

# -*- coding: utf-8 -*-

lista_x = [2, 3, 4, 5]
lista_y = [6, 7, 8, 9]


def no_entiendo_para_que_es_esto(lista):
    resultado = []   # creamos una nueva lista para trabajar
    resultado.append(lista[0])  # agregamos a la lista el primer item

    # recorremos desde la posición 2 hasta la ante ultima posición
    for item in lista[1:-1]:
        # añadimos a la lista dos veces el item actual.
        resultado.append(item)
        resultado.append(item)

    resultado.append(lista[-1])  # agregamos a la lista el ultimo item
    return resultado


print no_entiendo_para_que_es_esto(lista_x)
print no_entiendo_para_que_es_esto(lista_y)

Используя mГ©todo insert

# -*- coding: utf-8 -*-


def no_entiendo_para_que_es_esto2(lista):

    resultado = lista[:]  # hacemos una copia exacta de la lista original

    # creamos un rango desde el indice 1 hasta el ante último.
    for indice in range(len(lista))[1:-1]:
        # Debemos multiplicar por dos el indice al que queremos insertar el
        # valor, ya que la lista va creciendo y los item moviendose una
        # posicion en cada iteración.
        resultado.insert(indice * 2, lista[indice])

    return resultado


print no_entiendo_para_que_es_esto2(['a', 'b', 'c', 'd', 'e'])
print no_entiendo_para_que_es_esto2(['uno', 'segundo', 'tercero', 'ultimo'])
print no_entiendo_para_que_es_esto2([1, 2, 3, 4, 5, 6, 7])

Используя sum на tuplas произведенные начиная с одной iteraciГіn

def solucion3(lista):
    return sum([(item, item) for item in lista], ())[1:-1]


print solucion3([2, 3, 4, 5])
# (2, 3, 3, 4, 4, 5)

print solucion3([2, 3, 4, 5, 6])
# (2, 3, 3, 4, 4, 5, 5, 6)

print solucion3(['a', 'b', 'c', 'd'])
# ('a', 'b', 'b', 'c', 'c', 'd')

print solucion3(['a', 'b', 'c', 'd', 'c'])
# ('a', 'b', 'b', 'c', 'c', 'd', 'd', 'c')
5
ответ дан 24.11.2019, 13:17
  • 1
    Большое спасибо из-за твоего ответа. Он увидел эту нотацию часто в python [1:-1], но до настоящего времени не знал, на который он ссылался – Carlos Cardoso 26.09.2016, 04:09

Большое спасибо, я funcionГі твой метод. Но также encontrГ© в stack overflow английский язык функция, что это resolviГі. Если кому-то удается использовать в какой-то день это, здесь я это оставляю.

lista_x = [i for i in lista_x for _ in (0, 1)] 
lista_y = [i for i in lista_y for _ in (0, 1)]

#Eliminamos el primer elemento y el ultimo (excedentes generado por la funcion anterior)
lista_x.pop(0)
lista_y.pop(0)

lista_x.pop(len(lista_x)-1)
lista_y.pop(len(lista_y)-1)
2
ответ дан 24.11.2019, 13:17

Потому что не использовать ее funciГіn repeat библиотеки numpy

import numpy as np
a = [1,2,3,4]                    # una lista cualquiera
b = np.repeat(a,2)               # duplicas la lista
c = np.delete(b,[0,len(b)-1])    # eliminas el primer y último elemento
print c                          # imprimes la lista
[1 2 2 3 3 4]
0
ответ дан 24.11.2019, 13:17