Nicht ein großer Fan von Einzeilern (oder Komplexität) selbst, ich werde eine sehr explizite und lesbare (was normalerweise eine gute Sache ist!) Lösung für Ihr Problem vorschlagen.
So in sehr vereinfachenden Ansatz, könnten Sie dies tun:
def insertElements(oldList):
"""
Return a new list, alternating oldList tuples with
new tuples in the form (oldList[i+1][0],oldList[i][1])
"""
newList = []
for i in range(len(oldList)-1):
# take one tuple as is
newList.append(oldList[i])
# then add a new one with items from current and next tuple
newList.append((oldList[i+1][0],oldList[i][1]))
else:
# don't forget the last tuple
newList.append(oldList[-1])
return newList
oldList = [(3, 10), (4, 7), (5, 5)]
newList = insertElements(oldList)
Das wird Ihnen das gewünschte Ergebnis in newList
:
print(newList)
[(3, 10), (4, 10), (4, 7), (5, 7), (5, 5)]
Das ist nicht viel mehr Code als andere ausgereiftere (und speichereffiziente!) Lösungen, wie die Verwendung von Generatoren, UND ich halte es für viel leichter zu lesen als komplizierte Einzeiler. Außerdem wäre es leicht, dieser einfachen Funktion einige Überprüfungen hinzuzufügen (z. B. um sicherzustellen, dass Sie eine Liste von Tupeln haben).
Sofern Sie nicht bereits wissen, dass Sie dieses bestimmte Teil Ihres Codes optimieren müssen (vorausgesetzt, dies ist Teil eines größeren Projekts), sollte dies good enough sein. Zur gleichen Zeit ist es: einfach zu implementieren, einfach zu lesen, einfach zu erklären, einfach zu warten, einfach zu erweitern, einfach zu refactor, etc.
Hinweis: alle anderen früheren Antworten auf Ihre Frage sind auch bessere Lösungen als diese einfache, in vielerlei Hinsicht. Ich wollte dir nur eine andere Wahl geben. Hoffe das hilft.
Was ist die Eingabe des Benutzers? die neue Position der neuen Ulme? –
Der Benutzer stellt nur die ursprüngliche "oldList" zur Verfügung. Dann wird zwischen jeweils zwei alten Elementen ein neues Element hinzugefügt, basierend auf den zwei vorhandenen Elementen. –