Liste in Linkssequenz umwandeln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pre.tooo
User
Beiträge: 2
Registriert: Donnerstag 26. Januar 2023, 10:08

Aloha liebe Gemeinde,

ich stehe aktuell vor dem Problem eine Liste in eine Linkssequenz umwandeln zu müssen. Bevor jemand fragt: das habe ich mir nicht selber ausgedacht sondern unser Übungsgruppenleiter in der Uni.
Jetzt zu meiner eigentlichen Frage: Linkssequenzen werden doch eigentlich als Tupel dargestellt und können daher nicht verändert werden, solange das Programm läuft. Also dürfte es doch auch nicht möglich sein während der Laufzeit ein leeres Tupel mit den Listenelementen aufzufüllen oder gibt es da eine Variante die ich nur noch nicht kenne?

Info-Sheet Linkssequenzen
Bild

Beste Grüße
Simon
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist richtig. Also musst du sie von innen nach aussen aufbauen. Zb durch recursion.
pre.tooo
User
Beiträge: 2
Registriert: Donnerstag 26. Januar 2023, 10:08

__deets__ hat geschrieben: Donnerstag 26. Januar 2023, 11:52 Also musst du sie von innen nach aussen aufbauen.
Alles klar, habe eine Lösung gefunden.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

Etwas Code-Golf:

Code: Alles auswählen

left_sequence = lambda items: (it:=iter(items)) and ((a, left_sequence(it)) if (a:=next(it, it)) is not it else ())
Benutzeravatar
__blackjack__
User
Beiträge: 13074
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Für Code-Golf sind die Namen etwas lang und es wird auch ohne Not jedes beliebige iterierbare (endliche) Objekt verarbeitet statt nur Listen. Eine Lösung für Listen bekommt man in 37 Zeichen hin.

Eine Lösung für beliebige iterierbare Objekte würde ich mit `reduce()` und `more_itertools.always_reversible()` schreiben. Hier mal mit Hy, nicht das ich am Ende noch Hausaufgaben 1:1 löse:

Code: Alles auswählen

#!/usr/bin/env hy
(import functools [reduce]
        hyrule *
        more-itertools [always-reversible])
(require hyrule *)


(defn list->cons-list [items]
  (reduce (fn [a b] #(b a)) (always-reversible items) #()))


(defmain []
  (pprint (list->cons-list [1 2 3])))
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
grubenfox
User
Beiträge: 425
Registriert: Freitag 2. Dezember 2022, 15:49

als ich den Hy-Code sah, da fühlte ich mich an alte Zeiten erinnert, als ich mich mal kurze Zeit mit Common Lisp beschäftigt hatte und hatte mich gefragt, warum kommt er jetzt hier mit irgendwas das sich Hy nennt und wie Lisp aussieht?. Nach einer kurzen Suche im Web dann :shock: "was zur Hölle? Gibt es denn zu allem was man sich nicht ausdenken kann ein Python-Modul?" :shock: :roll: :P akuter Anfall von völliger Verblüffung! Danke dafür... :wink:
Antworten