Wie kann 12 Listen zu vergleichen

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.
bergen123
User
Beiträge: 13
Registriert: Mittwoch 29. März 2017, 16:31

Hallo, Erste zu sagen das ich kein deusch bin..... ,
so, ich möchte ein program mache das es 12 Listen mit Nummer hat und eine Input .Der Input soll mit allen 12 Listen vergleichen und print die Nummer die mit der Input übereinstimmen .
Beispiel:

input : 2 14 34 12 23 45

Erste liste : ["2", "14", "18", "28","40", "48"]

print 2 14


ich habe diesen code geschrieben :

Code: Alles auswählen

w = raw_input("give number: ").split()


a1 = ["2", "14", "18", "28","40", "48"]
b2 = ["5", "9", "17", "21", "32", "49"]
c3 = ["4", "18", "19", "30", "47", "49"]
d4 = ["9", "15", "25", "28", "39", "43"]
e5 = ["8", "11", "13", "25", "39", "48"]
f6 = ["3", "12", "13", "14", "31", "33"]
g7 = ["3", "12", "14", "23", "26", "45"]
h8 = ["1", "10", "12", "15", "18", "37"]
i9 = ["6", "7", "17", "38", "41", "44"]
j10 = ["1", "7", "14", "17", "27", "35"]
k11 = ["15", "23", "25", "26", "39", "48"]
l12 = ["5", "12", "14", "30", "41", "48"]

for a,b,c,d,e,f,g,h,i,j,k,l in zip(a1, b2, c3, d4, e5, f6, g7, h8, i9, j10, k11, l12):
  if a in w :
     print "(1)", a
  elif b in w:
     print "(2)", b
  elif c in w:
     print "(3)", c
  elif d in w:
     print "(4)", d
  elif e in w:
     print "(5)", e
  elif f in w:
     print "(6)", f
  elif g in w:
     print "(7)", g
  elif h in w:
     print "(8)", h
  elif i in w:
     print "(9)", i
  elif j in w:
     print "(10)", j
  elif k in w:
     print "(11)", k
  else:
     print "(12)", a
aber das Ergebnis ich bekomme habe , sind nicht gute....

give number: 2 14 18 28

(1) 2

(1) 14

(1) 18

(1) 28

(8) 40

(12) 48

Kann jemand Bitte diese probleme lösung? danke!
Zuletzt geändert von Anonymous am Samstag 24. Juni 2017, 16:18, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Python1906
User
Beiträge: 29
Registriert: Mittwoch 9. November 2016, 13:52

Hallo ich hätte eine Lösung.

Das Problem kommt erst bei der For-Schleife zustande.

ich würde dir empfehlen eine weitere Liste zumachen, wo deine Listen gespeichert sind (also : liste = [liste1, liste2, liste3...]
und dann mit einer For-Schleife das Array zu durchlaufen (also: for i in liste:) und dann mit noch einer For-Schleife die Werte zu überprüfen und auszugeben.

Es sieht folgendernmaßen aus:

[codebox=python file=Unbenannt.txt]
liste1 = ["1", "2", "3", "4"]
liste2 = ["5", "6", "7", "8"]
liste3 = ["9", "10", "11", "12"]
liste = [liste1, liste2, liste3]
for i in liste:
numbers = input("Geben sie bitte ein paar Zahlen ein").split()
for x in i:
if x in numbers:
print(x)[/code]
Ausgabe sieht dann zum Beispiel so aus:

Geben sie bitte ein paar Zahlen ein2 4 6 20 111
2
4

Geben sie bitte ein paar Zahlen ein4 8 23
8

Geben sie bitte ein paar Zahlen ein0



Du kannst selbstverständlich auch weitere Listen hinzufügen, indem du eine weitere Liste erstellst und sie (in diesem Beispiel) in liste hinzufügst
Python1906
User
Beiträge: 29
Registriert: Mittwoch 9. November 2016, 13:52

Wenn du auch noch möchtest, dass die Listennummer angezeigt wird sowie, dass ein Input für alle Listen gilt sieht es so aus:

Code: Alles auswählen

liste1 = ["1", "2", "3", "4"]
liste2 = ["5", "6", "7", "8"]
liste3 = ["9", "10", "11", "12"]
liste = [liste1, liste2, liste3]
numbers = input("Geben sie bitte ein paar Zahlen ein").split()
tmp = 0
for i in liste:
   tmp += 1
   for x in i:
      if x in numbers:
         print("("+str(tmp)+")"+x)
Zuletzt geändert von Anonymous am Samstag 24. Juni 2017, 16:20, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
bergen123
User
Beiträge: 13
Registriert: Mittwoch 29. März 2017, 16:31

Erste viele Danks für deine Antwort!

wie ich verstehe dir , ich soll jedes mal von jedem Liste fragen ? , es wäre die moglichkeit nur eimal die Input ausfüllen?

Die Idee von diesen Programm ist bekomme weil ich ein lotto spiele bin :mrgreen: und Oft spiel alle 12 Spiel . ich habe keine hoffnumg mehr , mehr als 5 oder 6 Zahlen zu gewine :x aber 2 number mit dem zusatzzahl man hat die möglichkeit zu gewine ... und als viele number zu kontroliert sind , habe ich gedacht diese Programm machen ....
bergen123
User
Beiträge: 13
Registriert: Mittwoch 29. März 2017, 16:31

die deine zweite antwort gelesen habe.... deine zweite antwort gefällt mir mehr.... jetz möchte ich versuche wie auf meine erste frage war .Danke für deine Beispielen , ich hoffe jetzt wird einfacher...

(1)1 2
(2)5
(3)10

ich bedanke mich für deine mühe !

ich wünsche dir ein Schöne Wochenende!!
BlackJack

@bergen123: Das ist ein Fall für Mengen und Mengenoperationen:

Code: Alles auswählen

In [6]: A
Out[6]: {'14', '18', '2', '28', '40', '48'}

In [7]: B = set('2 14 34 12 23 45'.split())

In [8]: B
Out[8]: {'12', '14', '2', '23', '34', '45'}

In [9]: A & B
Out[9]: {'14', '2'}
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

In der Onlinehilfe habe ich zum Thema folgenden Abschnitt gefunden:

https://docs.python.org/3.6/library/std ... ht=set#set

Ich meine nicht, dass ich dass in meiner Einführung (Buch) hatte. Löst einige Probleme sehr elegant, wenn ich das anmerken darf.
bergen123
User
Beiträge: 13
Registriert: Mittwoch 29. März 2017, 16:31

ich habe machmal mit zwei Listen gearbeitet , wenn zeit habe , nur sind sachen die ich vergese.....ich habe seit ein Jahr Python zu lernen , Erste mit codecademy und zur Zet versuche Übungs machen wie Beispiel http://easyprog99.blogspot.de/2017/02/4 ... cises.html
set Method ich denke wird benutz auch wenn eine tuple wiederholt sich in eine liste , wird sie gelost , Beispiel:

Code: Alles auswählen

a = {'14', '18', '2', '28', '40', '48'}

b = {'12', '14', '23', '45', '34', '2'}

c = set(a & b)

print c

aber arbeite mit 12 Listen , war meine Erste mal ..., weisst du wie ich kann der Codec von Python1906 , weiter machen ....

Code: Alles auswählen

w = raw_input("give number: ").split()

a1 = ["2", "14", "18", "28","40", "48"]
a2 = ["5", "9", "17", "21", "32", "49"]
a3 = ["4", "18", "19", "30", "47", "49"]
a4 = ["9", "15", "25", "28", "39", "43"]
a5 = ["8", "11", "13", "25", "39", "48"]
a6 = ["3", "12", "13", "14", "31", "33"]
a7 = ["3", "12", "14", "23", "26", "45"]
a8 = ["1", "10", "12", "15", "18", "37"]
a9 = ["6", "7", "17", "38", "41", "44"]
a10 = ["1", "7", "14", "17", "27", "35"]
a11 = ["15", "23", "25", "26", "39", "48"]
a12 = ["5", "12", "14", "30", "41", "48"]   

liste = [a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12]    
c = 0
for i in liste:
    c += 1
    for x in i:
        if x in w:
             print ("("+str(c)+")"+x)
wenn ich schreibe diese Number: 2 9 15 6 7
ich bekomme so:

(1)2

(2)9

(4)9

(4)15

(8)15

(9)6

(9)7

(10)7

(11)15

Aber ich möchte , das sie kommen so...

(1) 2

(2) 9

(4) 9 15

(8) 15

(9) 6 7

(10) 7

(11) 15
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

Ich würde dazu den Wert zwischenspeichern und beim nächsten Durchlauf schauen ob diese gleich sind.

Etwa so:

Code: Alles auswählen

w = raw_input("give number: ").split()

a1 = ["2", "14", "18", "28","40", "48"]
a2 = ["5", "9", "17", "21", "32", "49"]
a3 = ["4", "18", "19", "30", "47", "49"]
a4 = ["9", "15", "25", "28", "39", "43"]
a5 = ["8", "11", "13", "25", "39", "48"]
a6 = ["3", "12", "13", "14", "31", "33"]
a7 = ["3", "12", "14", "23", "26", "45"]
a8 = ["1", "10", "12", "15", "18", "37"]
a9 = ["6", "7", "17", "38", "41", "44"]
a10 = ["1", "7", "14", "17", "27", "35"]
a11 = ["15", "23", "25", "26", "39", "48"]
a12 = ["5", "12", "14", "30", "41", "48"]   

liste = [a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12]   
c = 0
for i in liste:
    c += 1
    for x in i:
        if x in w:
             new = "("+str(c)+")"+x
             if c != 1:
                  if new.strip(x) == old.strip(oldx):
                       print "("+str(oldc)+"("+oldx+" "+x
                  else: print new
             else: print new
          
             old = new
             oldx = x
             oldc = c
BlackJack

@nono191: Das sieht jetzt maximal unverständlich, umständlich, und ineffizient aus. Sofern es überhaupt funktioniert. Das vermag ich nicht zu sagen, weil ich's ausprobieren müsste, denn verstehen tue ich es auf den ersten Blick nicht, und für einen zweiten vergeht mir die Lust wenn ich draufschaue. :-)
bergen123
User
Beiträge: 13
Registriert: Mittwoch 29. März 2017, 16:31

das ist was ich suche!

wenn ein Tag möchtest , es wäre die möglichkeit beschreibt jeden schritte , ich möchte nicht nur kopiert sondern lernen, warum das so ist ...
nur wenn du ein Tag Lust hast.....

ich bedanke dir für deinen Mühe!

ich wünsche dir eine Schöne Wochenende!
bergen123
User
Beiträge: 13
Registriert: Mittwoch 29. März 2017, 16:31

Code: Alles auswählen

w = raw_input("give number: ").split()

a1 = ["2", "14", "18", "28","40", "48"]
a2 = ["5", "9", "17", "21", "32", "49"]
a3 = ["4", "18", "19", "30", "47", "49"]
a4 = ["9", "15", "25", "28", "39", "43"]
a5 = ["8", "11", "13", "25", "39", "48"]
a6 = ["3", "12", "13", "14", "31", "33"]
a7 = ["3", "12", "14", "23", "26", "45"]
a8 = ["1", "10", "12", "15", "18", "37"]
a9 = ["6", "7", "17", "38", "41", "44"]
a10 = ["1", "7", "14", "17", "27", "35"]
a11 = ["15", "23", "25", "26", "39", "48"]
a12 = ["5", "12", "14", "30", "41", "48"]   

liste = [a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12]    
c = 0
for i in liste:
    c += 1
    for x in i:
        if x in w:
             print "(" + str(c) + ")" + x 

was unten stehe nicht.... auch wenn ich diese Ergebnis suche , es wäre die moglichkeit eine andere lösunge mehr verständliche schreiben....
Zuletzt geändert von Anonymous am Samstag 24. Juni 2017, 22:02, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

Also dieser Code speichert einfach die letzten Ergebnisse mit:

Code: Alles auswählen

old = new
oldx = x
oldc = c
Prüft ob es die erste Zahl ist:

Code: Alles auswählen

if c != 1:
Vergleicht es das c (Das c steht nachher in den Klammern.) von der letzten Zahl und von dieser.

Code: Alles auswählen

if new.strip(x) == old.strip(oldx):
Wenn es gleich ist printet es das c und beide Ergebnisse die für das c stimmen:

Code: Alles auswählen

print "("+str(oldc)+"("+oldx+" "+x
Auch dir schönes Wochenende und Entschuldigung wenn es nicht sehr gut geschrieben ist.
nono
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@nono191: was Du da also beschreibst, ist eine komplizierte Methode, um oldc mit c zu vergleichen. Zudem ist sie falsch und funktioniert nur, weil Du Glück hast. Und sobald man mehr als zwei Treffer hat, bekommt man seltsame Ausgaben. »strip« entfernt alle Zeichen, die man als Argument übergibt. Da Du das c in Klammern packst und x nie eine Klammer enhält, geht das zufälligerweise gut. Aber schau mal hier:

Code: Alles auswählen

>>> c = 3
>>> x = "23"
>>> new = str(c)+": "+x
>>> new
'3: 23'
>>> new.strip(x)
': '
@bergen123: Mengen (set) sind praktisch, weil sie schon eine Methode besitzen im aus zwei Mengen, die gemeinsamen Elemente herauszufinden. Du hast also 12 Sets von getippten Zahlen und ein Set von gezogenen Zahlen, die Du nun nur noch miteinander vergleichen mußt. Da Du wissen willst, im wievielten Feld es wieviele Übereinstimmungen gibt, liefert »enumerate« eine zusätzliche Zählvariable

Code: Alles auswählen

bet_numbers = [
    {"2", "14", "18", "28","40", "48"},
    {"5", "9", "17", "21", "32", "49"},
    {"4", "18", "19", "30", "47", "49"},
    {"9", "15", "25", "28", "39", "43"},
    {"8", "11", "13", "25", "39", "48"},
    {"3", "12", "13", "14", "31", "33"},
    {"3", "12", "14", "23", "26", "45"},
    {"1", "10", "12", "15", "18", "37"},
    {"6", "7", "17", "38", "41", "44"},
    {"1", "7", "14", "17", "27", "35"},
    {"15", "23", "25", "26", "39", "48"},
    {"5", "12", "14", "30", "41", "48"},
]

drawn_numbers = set(raw_input("drawn numbers: ").split())
 
for index, numbers in enumerate(bet_numbers, start=1):
    correct = drawn_numbers & numbers
    if correct:
        print "({}) {}".format(index, ', '.join(sorted(correct)))
bergen123
User
Beiträge: 13
Registriert: Mittwoch 29. März 2017, 16:31

Vieleeeeeeeee Danks für deine bemühe!!!!!!


was ich nicht verstehe:

if correct:

weil nochmal anweisen der If statement vergleich mit etwas.......
weiss du wo ich Ähnliche Übungen wie diese(man wird set und format benutz) finde kann , aber die nicht zu schwierig sind..... meine Python kenntnis ist sehr einfach.... ich möchte diese zwei Begriffe tiffer in meine Kopf haben..... und das beste lösung ist , mit Übungen.....

ich wünsche dir eine Schöne Wochenende!!!
BlackJack

@bergen123: Nach ``if`` muss kein Vergleich stehen sondern irgend ein beliebiger Ausdruck der ”wahr” oder ”falsch” ergibt, also `True` oder `False` wenn man die `bool()`-Funktion mit dem Ergebnis aufruft. Und leere Container sind in diesem Kontext ”falsch”, während Container mit mindestens einem Element ”wahr” sind:

Code: Alles auswählen

In [1]: bool('')
Out[1]: False

In [2]: bool('x')
Out[2]: True

In [3]: bool([])
Out[3]: False

In [4]: bool([42])
Out[4]: True

In [5]: bool({})
Out[5]: False

In [6]: bool({'answer': 42})
Out[6]: True

In [7]: bool(set())
Out[7]: False

In [8]: bool(set([42]))
Out[8]: True
bergen123
User
Beiträge: 13
Registriert: Mittwoch 29. März 2017, 16:31

um Python zu lernen (so, ich lerne noch....) habe ich Erste mit https://automatetheboringstuff.com/ angefang , dann bin ich in codecademy gegangen und dann wo ich bin jetz....

so , zurück zum Boolean... , hast du Recht if Statements gehört zum Boolean https://automatetheboringstuff.com/chapter2/
bergen123
User
Beiträge: 13
Registriert: Mittwoch 29. März 2017, 16:31

ohne euch ich werde diese Übung nicht gemacht . ich habe vor drei Tage in stackoverflow https://stackoverflow.com/questions/446 ... 1#44737431 gefragt , und keine hat mich antgewortet... , ich habe bemerke die bei stackoverflow stehe mehr um viele Pukten zu bekommen als andere Menschen zu hilfe , ich weiss sind nicht alle , aber am meisten .... mehr punkten bedeutet mehr chance um sich zu bewerben.... jetzt möchte ich eure lösung zu lernen...

danke euch!!
bergen123
User
Beiträge: 13
Registriert: Mittwoch 29. März 2017, 16:31

Code: Alles auswählen

bet_numbers = [
    {"2", "14", "18", "28","40", "48"},
    {"5", "9", "17", "21", "32", "49"},
    {"4", "18", "19", "30", "47", "49"},
    {"9", "15", "25", "28", "39", "43"},
    {"8", "11", "13", "25", "39", "48"},
    {"3", "12", "13", "14", "31", "33"},
    {"3", "12", "14", "23", "26", "45"},
    {"1", "10", "12", "15", "18", "37"},
    {"6", "7", "17", "38", "41", "44"},
    {"1", "7", "14", "17", "27", "35"},
    {"15", "23", "25", "26", "39", "48"},
    {"5", "12", "14", "30", "41", "48"},
]

Welche bedeutung hat die geschweifte Klammer nach der Klammer . Ich weiss die klammer wird für Listen und geschweifte Klammer für dictionary , aber beiden zusammen , welche bedeutung hat ?

sorry das ich frage :oops: , aber habe gesucht in google , und nur sprechen oder von einer oder von andere , nicht wenn beiden zusammen sind...
BlackJack

bergen123: Die geschweifte Klammer hat nach der eckigen Klammer die gleiche Bedeutung wie sonst auch: Menge (`set`) oder Wörterbüch (`dict`). Je nach dem was *in* den geschweiften Klammern steht.
Antworten