index in tupel/list finden

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.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Falls dir immer noch daran gelegen ist, dass andere dir behilflich sein sollen, dass dein Algorithmus schneller wird, dann musst du präzisere Angaben machen.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Vielleicht lohnt es sich, über ein Set zu gehen:

Code: Alles auswählen

tup = (2,5,6,7,8,12,13)
for x in set((9,4,14)).intersection(tup):
    print tup.index(x)
Bei dieser Herangehensweise weiß man aber natürlich nur, ob es Fundstellen gibt und man kennt die Positionen, man weiß aber nicht, welche Zahl wo gefunden wurde. Es bleibt weiterhin die Frage offen, was genau du vor hast. Oder ist das ein Geheimnis? Vielleicht gibt es einen wesentlich effizienteren Algorithmus für dein Problem.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

joh# hat geschrieben:Das Tupel ist in diesem Fall nur 3 Elemente lang, wobei für jedes Element nur 4 Zahlenwerte
möglich sind, hält sich also alles in Grenzen.
Ist damit also sowas gemeint?

Code: Alles auswählen

values = [(1,2,3), (2,3,4), (3,4,1)]
wanted = set([4,1,2])
Oder heißt die Angabe, dass die 3 Elemente 4 verschieden Werte aus dem Bereich von bspw. 1-50 haben?

Code: Alles auswählen

values = [(34,12,45,1), (4,8,23,16), (50,33,34,2)]
Irgendwie deckt sich das aber alles nicht mit dem eingangs gemachten Beispiel von dir. Also, was willst du genau? Weißt du überhaupt, was du willst? ;)
joh#
User
Beiträge: 139
Registriert: Freitag 6. November 2009, 13:16

@numerix, snafu
snafu hat geschrieben:Vielleicht lohnt es sich, über ein Set zu gehen:
. . .
Oder ist das ein Geheimnis? .
[[na google/Schäuble&Co schlafen wohl noch ... :) ]]
Ich hab doch in einem anderen Beitrag schon mal nach einem
Skat Problem angefragt...
Was ich also letztlich (verstehen) will, wie man für jede Möglichkeit des
Spielverlaufs ab Stich 6 (das sind die erwähnten 1728000) die
für die jeweiligen Spieler eingebrachten Augensummen berechnet,
nätürlich mit dem Ziel, die richtige Karte auszuwählen.
Und dazu muß natürlich irgendwann mal der Besitzer des jeweiligen
Stichs ermittelt werden.

snafu hat geschrieben: Vielleicht gibt es einen wesentlich effizienteren Algorithmus für dein Problem
bis jetzt existiert eine liste mit allen möglichen Kombnationen s.o., mit Referenzen auf die aktuelle Kartensituation.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Wenn du dir einmal die Mühe machen würdest, exakt zu benennen, wie viele verschiedene und welche Werte in wie vielen verschiedenen Tupeln welcher Länge und mit welchen minimalen und maximalen Werten zu suchen sind, würde das die Chance, dass noch jemand eine Idee zur Performance-Steigerung hat, enorm erhöhen.
joh#
User
Beiträge: 139
Registriert: Freitag 6. November 2009, 13:16

numerix hat geschrieben:Wenn du dir einmal die Mühe machen würdest, exakt zu benennen, wie viele verschiedene und welche Werte in wie vielen verschiedenen Tupeln welcher Länge und mit welchen minimalen und maximalen Werten zu suchen sind, würde das die Chance, dass noch jemand eine Idee zur Performance-Steigerung hat, enorm erhöhen.
...also, wenn der Tupel in dem gesucht wird (V,M,H) ist, dann
sind für V, für M und auch für H jeweils folgende Zahlen möglich:

Code: Alles auswählen

0x01000000
0x01010000
0x01020000
0x01030000
0x00010000
0x01050000
0x01060000
0x01070000

0x02000000
0x02010000
0x02020000
0x02030000
0x00020000
0x02050000
0x02060000
0x02070000

0x03000000
0x03010000
0x03020000
0x03030000
0x00030000
0x03050000
0x03060000
0x03070000

0x04000000
0x04010000
0x04020000
0x04030000
0x00040000
0x04050000
0x04060000
0x04070000
0x63630000
jeder Block steht dabei für eine Farbe, die als höchstwertigstes
Byte codiert ist, danach kommt der eigentliche Codebyte der Karte,
benutzt wird das z.z. in folgendem Code:

Code: Alles auswählen

for crd in (0x00010000,0x00020000,0x00030000,0x00040000):
    if crd in (V,M,H):          
        owner=(V,M,H).index(crd)
        break
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

joh# hat geschrieben:[[na google/Schäuble&Co schlafen wohl noch ... :) ]]
Ich hab doch in einem anderen Beitrag schon mal nach einem
Skat Problem angefragt...
Um ehrlich zu sein, interessieren mich irgendwelche Skat Probleme nicht. ;P Ich lese hier sowieso nur einen Bruchteil der Threads. Wenn nicht schon bei der Überschrift, dann merke ich doch meist nach den ersten 3 Sätzen eines Threads, dass ich eigentlich gar keine Lust auf das Thema habe. :)
Antworten