ist es möglich eine Teilmengenabfrage in eine einzelne for-Schleife zu schreiben? Ich meine das etwa so(PseudoCode):
Code: Alles auswählen
Menge = {"irgendwelche Elemente"}
for {i, j}<Menge
"Mach was tolles"
print("was tolles")
Grüße, Tyrax
Code: Alles auswählen
Menge = {"irgendwelche Elemente"}
for {i, j}<Menge
"Mach was tolles"
print("was tolles")
Ab Python 3.0 geht es auch so:derdon hat geschrieben:Ich habe nicht ganz verstanden, was du vorhast, Mengen werden in Python mit der BIF set bzw frozenset erstellt.
Code: Alles auswählen
menge = {"a", "b", "c", "d"}
Code: Alles auswählen
In [1]: a = set(('foo', 'bar', 'baz'))
In [2]: b = set(('foo', 'bar'))
In [3]: b.issubset(a)
Out[3]: True
Code: Alles auswählen
# Zunächst zu 1.: Der Benutzer soll die Anzahl der Ecken eingeben und danach die möglichen Kanten mit "1" oder "0" einfügen.
n = int(input("Wieviele Ecken soll der Graph haben (n>0)? "))
# Wir erzeugen die Eckenmenge
V = {1}
V.clear()
for i in range(1, n+1): # n+1 weil die obere Grenze exklusiv ist.
V.add(i)
print(V)
E = {"Dummy"}
E.clear()
for i in range(1, n):
for j in range(i, n):
Kante = int(input("Ist die Kante enthalten?"))
if Kante:
E.add((i,j))
print(V, E)
Weil es das leere Dictionary ist. Wenn du die leere Menge möchtest, verwendet einfach "set()".Tyrax hat geschrieben:V = {} bezeichnet nicht die leere Menge, warum?
Schau mal in der Doku unter "formatting".Tyrax hat geschrieben:In die Benutzerabfrage in der Schleife hätte ich gerne den Namen der aktuellen Kante, zB "{i, j}". Wie kann ich das realisieren?
Das dürfte schlicht daran liegen, dass Mengenliterale der Form {el1, el2} erst mit Python 3.0 eingeführt wurden und die Mengenklammern bis dahin ausschließlich Dictionaries vorbehalten waren. Ob es überhaupt eine gute Idee war, diese neue Schreibweise zuzulassen weiß ich nicht - das schafft neue Probleme, die es vorher so nicht gab.Tyrax hat geschrieben:sorry, dass {} ein dictionary ist, hätte ich selber nachlesen sollen. Ich würde das leere dictionary in Py3k ja lieber mit {:} bezeichnen, so dass {} für die leere Menge frei wird. Wahrscheinlich gibt's aber gute Gründe, warum es nicht so ist.
Code: Alles auswählen
from itertools import combinations
V = ... # V irgendwie initialisieren
E = ...
for edge in combinations(V, 2):
if ...:
E.add(edge)
BTW, über "BIF" musste ich erst eine Weile nachdenken. Wozu Abkürzungen verwenden, wenn sie keiner versteht?derdon hat geschrieben:Ich habe nicht ganz verstanden, was du vorhast, Mengen werden in Python mit der BIF set bzw frozenset erstellt. Vor der for-Schleife gehört eine If-Abfrage, das kann man nicht so kurz schreiben, wie du es möchtest. Suchst du evtl. die BIF zip?
Gut dass ich nicht der einzige doofe bin der nicht sofort unter "BIF" "built-in function" versteht.birkenfeld hat geschrieben:BTW, über "BIF" musste ich erst eine Weile nachdenken. Wozu Abkürzungen verwenden, wenn sie keiner versteht?
Da kann man allerdings niemandem einen Vorwurf machen, da sie in der Library Reference als solche dokumentiert sind.Leonidas hat geschrieben: Zudem ``set`` und ``frozenset`` eigentlich etwas mehr als nur Funktionen sind.
In dem Python-Buch, das ich lese ("Core Python Programming") wird dieser Begriff verwendet. Ich dachte, das diese Abkürzung vielen bekannt sei. In Zukunft werde ich "built-in function" schreiben.birkenfeld hat geschrieben:BTW, über "BIF" musste ich erst eine Weile nachdenken. Wozu Abkürzungen verwenden, wenn sie keiner versteht?derdon hat geschrieben:Ich habe nicht ganz verstanden, was du vorhast, Mengen werden in Python mit der BIF set bzw frozenset erstellt. Vor der for-Schleife gehört eine If-Abfrage, das kann man nicht so kurz schreiben, wie du es möchtest. Suchst du evtl. die BIF zip?