Seite 1 von 2

Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Freitag 8. Mai 2020, 22:32
von Schlitzaaa
Guten Abend,
wir haben folgende aufgabe bekommen (mit den #).
Jetzt weiß ich jedoch nicht weiter
habe jz versucht zu zählen wie oft eine Zahl vorkommt aber irgendwie will das auch nicht^^
evtl hat jemand von euch eine idee:

Code: Alles auswählen

# Gegeben eine Liste von Zahlen. Bestimmen Sie ob alle Zahlen paarweise 
# verschieden indem Sie die Liste zunächst sortieren.

A = [80, 9, 761, 96, 517, 816, 277, 382, 999, 821, 461, 812, 586, 221, 969, 862, 6, 390, 872, 807, 594, 22, 868, 682, 660,
     43, 7, 368, 951, 307, 975, 246, 698, 953, 668, 33, 825, 206, 402, 760, 845, 658, 848, 477, 581, 621, 935, 591, 903,
     102, 335, 724, 406, 559, 274, 310, 255, 236, 167, 104, 814, 271, 558, 465, 762, 749, 824, 453, 409, 635, 427, 693,
     26, 613, 89, 290, 627, 464, 567, 106, 576, 433, 458, 196, 765, 781, 666, 915, 520, 956, 145, 626, 918, 998, 818, 83,
     256, 467, 352, 628, 530, 482, 521, 129, 828, 252, 428, 377, 757, 243, 451, 725, 775, 770, 331, 831, 758, 751, 995,
     689, 261, 13, 980, 982, 625, 717, 156, 856, 925, 98, 227, 907, 644, 158, 273, 233, 605, 250, 823, 962, 719, 272, 550,
     249, 484, 485, 348, 997, 959, 532, 383, 768, 267, 870, 266, 225, 313, 916, 316, 624, 189, 911, 597, 99, 961, 251, 978,
     75, 645, 317, 439, 622, 400, 505, 339, 413, 235, 269, 827, 21, 141, 659, 940, 429, 630, 340, 327, 173, 991, 305, 362, 226,
     556, 651, 887, 472, 116, 514, 527, 695, 929, 349, 896, 4, 391, 16, 430, 844, 994, 711, 778, 503, 297, 510, 31, 851,
     38, 101, 193, 182, 423, 917, 573, 536, 165, 288, 744, 135, 777, 604, 113, 56, 35, 392, 332, 696, 835, 584, 37, 239, 769,
     424, 609, 139, 276, 771, 185, 95, 616, 324, 263, 280, 554, 932, 650, 247, 897, 560, 967, 663, 468, 886, 181, 853, 170,
     449, 891, 966, 607, 811, 759, 29, 675, 372, 425, 202, 222, 211, 47, 618, 259, 491, 496, 931, 737, 890, 325, 589, 197,
     570, 938, 840, 786, 86, 544, 191, 446, 791, 721, 735, 204, 685, 993, 957, 3, 926, 39, 507, 699, 958, 15, 553, 952, 66,
     69, 571, 977, 802, 837, 1, 789, 229, 681, 401, 470, 333, 442, 134, 456, 766, 356, 653, 895, 78, 551, 460, 188, 830, 318,
     270, 159, 906, 203, 880, 640, 213, 364, 892, 344, 841, 105, 569, 712, 704, 19, 53, 17, 341, 612, 950, 343, 371, 125, 869,
     519, 480, 731, 57, 688, 422, 346, 782, 785, 859, 515, 847, 745, 342, 215, 70, 955, 493, 2, 361, 876, 299, 363, 376, 499,
     153, 432, 697, 130, 111, 676, 178, 469, 163, 231, 774, 320, 154, 529, 241, 535, 301, 610, 664, 114, 40, 839, 513, 220,
     914, 28, 582, 172, 431, 577, 700, 414, 575, 448, 403, 579, 981, 580, 488, 905, 138, 328, 606, 148, 144, 291, 68, 298,
     753, 501, 359, 673, 302, 157, 547, 617, 309, 849, 234, 542, 741, 855, 598, 109, 983, 195, 18, 792, 706, 603, 829, 490,
     161, 279, 596, 300, 149, 314, 257, 746, 793, 817, 150, 58, 476, 365, 378, 996, 909, 166, 264, 223, 637, 438, 661, 710,
     974, 124, 946, 443, 788, 498, 455, 939, 671, 619, 146, 726, 709, 815, 667, 5]

for n in range(len(A),1,-1):

     imax = 0
     for i in range(1,n):
          if A[i] > A[imax]:
               imax = i
     hilf = A[n-1]
     A[n-1] = A[imax]
     A[imax] = hilf

#print(A)

#for g in range(len(A)):
#     if A[g] /=


for wert in range(len(A)):
 if not wert in A:
   A.append(wert);
 print(wert, A.count(wert))
Vielen Dank
Schlitzaaa

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Freitag 8. Mai 2020, 22:42
von pillmuncher
Du musst die Aufgabe genau lesen:

Bestimmen Sie ob alle Zahlen paarweise verschieden indem Sie die Liste zunächst sortieren.

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Freitag 8. Mai 2020, 23:48
von Schlitzaaa
pillmuncher hat geschrieben: Freitag 8. Mai 2020, 22:42 Du musst die Aufgabe genau lesen:

Bestimmen Sie ob alle Zahlen paarweise verschieden indem Sie die Liste zunächst sortieren.
Sortiert wird Sie ja
und meinem Verständnis nach müsste ich jz noch zählen ob eine Zahl doppelt vorkommt

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 00:08
von __blackjack__
@Schlitzaaa: Sortiert wird sie sehr umständlich. Und nein, Du musst nicht zählen ob eine Zahl doppelt (oder mehrfach) vorkommt wenn die Zahlen *sortiert* sind. Das hat ja einen Sinn warum die erst sortiert werden sollen.

Sortieren wäre einfach ``A.sort()``.

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 00:57
von pillmuncher
Schlitzaaa hat geschrieben: Freitag 8. Mai 2020, 23:48 Sortiert wird Sie ja
und meinem Verständnis nach müsste ich jz noch zählen ob eine Zahl doppelt vorkommt
Achso, Bubblesort ohne jedwede Optimierung. Da muss man auch erst mal drauf kommen.

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 09:11
von ThomasL
Kann man in einer Zeile lösen

Code: Alles auswählen

print('Verschieden' if len(A) == len(set(A)) else 'Nicht verschieden')
oder wenn man vorher sortieren muss

Code: Alles auswählen

B = sorted(A)
gleiche = sum(B[i] == B[i+1] for i in range(len(B)-1))
print('Verschieden' if gleiche == 0 else 'Nicht verschieden')

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 09:49
von nezzcarth
pillmuncher hat geschrieben: Samstag 9. Mai 2020, 00:57 Achso, Bubblesort ohne jedwede Optimierung. Da muss man auch erst mal drauf kommen.
Na ja gut, Bubblesort ist halt oft das allererste Verfahren, das man so lernt. Ich denke, das ist wieder so eine Aufgabe aus einem Einführungskurs, wo Built-Ins nicht verwendet werden dürfen.

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 09:55
von __blackjack__
@ThomasL: Anstelle von `sum()` würde ich `all()` verwenden. Dann bekommt man einen Wahrheitswert und das ganze bricht ab wenn die erste Doppelung gefunden wurde.

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 11:32
von Schlitzaaa
ThomasL hat geschrieben: Samstag 9. Mai 2020, 09:11 Kann man in einer Zeile lösen

Code: Alles auswählen

print('Verschieden' if len(A) == len(set(A)) else 'Nicht verschieden')
oder wenn man vorher sortieren muss

Code: Alles auswählen

B = sorted(A)
gleiche = sum(B[i] == B[i+1] for i in range(len(B)-1))
print('Verschieden' if gleiche == 0 else 'Nicht verschieden')
Zunächst vielen Dank an Sie und an die andere Hilfesteller.

Leider darf ich Ihren Vorschlag/ Ihre Lösung nicht verwenden (Da so vorgegeben...)

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 12:05
von ThomasL
__blackjack__ hat geschrieben: Samstag 9. Mai 2020, 09:55 @ThomasL: Anstelle von `sum()` würde ich `all()` verwenden.
Definitiv ich auch ;-)
Schlitzaaa hat geschrieben: Samstag 9. Mai 2020, 11:32 Leider darf ich Ihren Vorschlag/ Ihre Lösung nicht verwenden (Da so vorgegeben...)
Das habe ich mir schon gedacht. Sollte nur die Möglichkeiten von Python aufzeigen.
habe jz versucht zu zählen wie oft eine Zahl vorkommt aber irgendwie will das auch nicht^^
Nun, das kann man machen, dazu bräuchte man aber die Liste vorher nicht zu sortieren.
Es muss also einen Grund haben, wieso das gemacht werden soll.
Was passiert denn wenn eine Zahl doppelt enthalten ist und die Liste sortiert wird?

...........

Richtig, in der sortierten Liste folgt diese Zahl dann der gleichen Zahl davor.
Und das kann man prüfen.
Zum Beispiel so wie ich es im zweiten Teil gemacht habe.

Code: Alles auswählen

unterschiedlich = all(A[i] != A[i+1] for i in range(len(A)-1))
print('Alle Zahlen verschieden' if unterschiedlich else 'Mind. eine gleiche Zahl vorhanden.')
Deinen Bubblesort kannst du ja behalten.

Solltest du selbst all() nicht verwenden dürfen, dann musst du überlegen, wie du das nachbauen kannst.

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 12:52
von kbr
Eine sinnvolle Zusatzaufgabe könnte darin bestehen herauszufinden, für welche Zahlen die Bedingung „paarweise verschieden“ nicht erfüllt ist. Das schließt dann die Anwendung von sum() und all() aus.

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 14:30
von Schlitzaaa
ThomasL hat geschrieben: Samstag 9. Mai 2020, 12:05
__blackjack__ hat geschrieben: Samstag 9. Mai 2020, 09:55 @ThomasL: Anstelle von `sum()` würde ich `all()` verwenden.
Definitiv ich auch ;-)
Schlitzaaa hat geschrieben: Samstag 9. Mai 2020, 11:32 Leider darf ich Ihren Vorschlag/ Ihre Lösung nicht verwenden (Da so vorgegeben...)
Das habe ich mir schon gedacht. Sollte nur die Möglichkeiten von Python aufzeigen.
habe jz versucht zu zählen wie oft eine Zahl vorkommt aber irgendwie will das auch nicht^^
Nun, das kann man machen, dazu bräuchte man aber die Liste vorher nicht zu sortieren.
Es muss also einen Grund haben, wieso das gemacht werden soll.
Was passiert denn wenn eine Zahl doppelt enthalten ist und die Liste sortiert wird?

...........

Richtig, in der sortierten Liste folgt diese Zahl dann der gleichen Zahl davor.
Und das kann man prüfen.
Zum Beispiel so wie ich es im zweiten Teil gemacht habe.

Code: Alles auswählen

unterschiedlich = all(A[i] != A[i+1] for i in range(len(A)-1))
print('Alle Zahlen verschieden' if unterschiedlich else 'Mind. eine gleiche Zahl vorhanden.')
Deinen Bubblesort kannst du ja behalten.

Solltest du selbst all() nicht verwenden dürfen, dann musst du überlegen, wie du das nachbauen kannst.
Okey mal angenommen ich würde die zahlen ohne sortieren überprüfen wie könnte ich das umsetzen ?
ich schätze mit einer for schleife das problem allerdings ist, dass ich nicht hinbekomme das er die zahlen an sich vergleicht
als Bsp: [80, 96, 402, 569,...]
nun nimmt er bei mir die Stellen der zahlen und vergleicht diese
also gibt er folgendes aus: 0 1; 1 1; 2 1; 3 1;...

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 15:20
von Sirius3
Wie sollen wir sehen, was Du falsch machst, wenn wir Deinen Code nicht kennen?

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 15:56
von __blackjack__
Wobei wenn die Aufgabe sortieren als ersten Schritt vorschreibt, sollte man das vielleicht auch machen. Ist die Frage ob man für normales paarweises Vergleichen mit Worst-Case quadratischer Laufzeit überhaupt Punkte für die Lösung bekommt, beziehungsweise wie viele dabei noch heraus springen würden.

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 18:04
von Schlitzaaa
__blackjack__ hat geschrieben: Samstag 9. Mai 2020, 15:56 Wobei wenn die Aufgabe sortieren als ersten Schritt vorschreibt, sollte man das vielleicht auch machen. Ist die Frage ob man für normales paarweises Vergleichen mit Worst-Case quadratischer Laufzeit überhaupt Punkte für die Lösung bekommt, beziehungsweise wie viele dabei noch heraus springen würden.
Dann setze ich mir das eben als aufgabe das herauszufinden ^^ (was ich schon die ganze zeit versuche btw)

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 18:05
von Schlitzaaa
Sirius3 hat geschrieben: Samstag 9. Mai 2020, 15:20 Wie sollen wir sehen, was Du falsch machst, wenn wir Deinen Code nicht kennen?
Sie kennen den Code
mehr existiert dazu nicht
ich probiere viel rum und behalte nicht alles was ich probiere im Code ..

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 18:45
von __deets__
Und wir koennen nicht helfen, wenn wir nicht den Code sehen, der zu einer Problembeschreibung passt. Fertige Loesungen gibt's nicht. Und da es schon ein bubblesort gibt, ist es trivial, die Aufgabe umzusetzen, denn da werden alle Zahlen paarweise miteinander verglichen. Da muss man dann beim Vergleichen eben nur noch was extra machen.

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 19:02
von Schlitzaaa
__deets__ hat geschrieben: Samstag 9. Mai 2020, 18:45 Und wir koennen nicht helfen, wenn wir nicht den Code sehen, der zu einer Problembeschreibung passt. Fertige Loesungen gibt's nicht. Und da es schon ein bubblesort gibt, ist es trivial, die Aufgabe umzusetzen, denn da werden alle Zahlen paarweise miteinander verglichen. Da muss man dann beim Vergleichen eben nur noch was extra machen.
Soll ja auch keine fertige lösung geben sondern eher einen Denkanstoß.........
und auch wenns trivial klingt möchte ich eben auch wissen wie ich es mache wenn ich es nicht sortiere.....

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 19:23
von __blackjack__
@Schlitzaaa: Naja das simpelste ist paarweise vergleichen, also jeden Eintrag mit jedem anderen.

Re: Python Feld auf Paarweise Verschieden Überprüfen

Verfasst: Samstag 9. Mai 2020, 19:35
von __deets__
Ohne sortieren geht es nicht*. WÄHREND man sortiert, kann man aber schon prüfen ob ... Trommelwirbel... zwei zu vergleichende Zahlen GLEICH sind. Und dann abbrechen, und ausgeben, dass man keine paarweise verschiedenen Zahlen hat.

* Verfahren wie sets benutzen unter der Haube entweder auch sortierte Elemente, oder bestenfalls hashing, aber das ist zum selbst bauen wohl etwas veil des guten.