Python Feld auf Paarweise Verschieden Überprüfen

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.
Schlitzaaa
User
Beiträge: 34
Registriert: Donnerstag 11. Januar 2018, 10:47

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
Benutzeravatar
pillmuncher
User
Beiträge: 1532
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Du musst die Aufgabe genau lesen:

Bestimmen Sie ob alle Zahlen paarweise verschieden indem Sie die Liste zunächst sortieren.
In specifications, Murphy's Law supersedes Ohm's.
Schlitzaaa
User
Beiträge: 34
Registriert: Donnerstag 11. Januar 2018, 10:47

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
Benutzeravatar
__blackjack__
User
Beiträge: 14178
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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()``.
“Every thinking person fears nuclear war and every technological nation plans for it. Everyone knows
it's madness, and every country has an excuse.” — Carl Sagan, Cosmos, Episode 13: Who Speaks for Earth?
Benutzeravatar
pillmuncher
User
Beiträge: 1532
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

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.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
ThomasL
User
Beiträge: 1381
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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')
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
nezzcarth
User
Beiträge: 1779
Registriert: Samstag 16. April 2011, 12:47

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14178
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Every thinking person fears nuclear war and every technological nation plans for it. Everyone knows
it's madness, and every country has an excuse.” — Carl Sagan, Cosmos, Episode 13: Who Speaks for Earth?
Schlitzaaa
User
Beiträge: 34
Registriert: Donnerstag 11. Januar 2018, 10:47

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...)
Benutzeravatar
ThomasL
User
Beiträge: 1381
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

__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.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
kbr
User
Beiträge: 1509
Registriert: Mittwoch 15. Oktober 2008, 09:27

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.
Schlitzaaa
User
Beiträge: 34
Registriert: Donnerstag 11. Januar 2018, 10:47

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;...
Sirius3
User
Beiträge: 18307
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie sollen wir sehen, was Du falsch machst, wenn wir Deinen Code nicht kennen?
Benutzeravatar
__blackjack__
User
Beiträge: 14178
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“Every thinking person fears nuclear war and every technological nation plans for it. Everyone knows
it's madness, and every country has an excuse.” — Carl Sagan, Cosmos, Episode 13: Who Speaks for Earth?
Schlitzaaa
User
Beiträge: 34
Registriert: Donnerstag 11. Januar 2018, 10:47

__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)
Schlitzaaa
User
Beiträge: 34
Registriert: Donnerstag 11. Januar 2018, 10:47

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 ..
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Schlitzaaa
User
Beiträge: 34
Registriert: Donnerstag 11. Januar 2018, 10:47

__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.....
Benutzeravatar
__blackjack__
User
Beiträge: 14178
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Schlitzaaa: Naja das simpelste ist paarweise vergleichen, also jeden Eintrag mit jedem anderen.
“Every thinking person fears nuclear war and every technological nation plans for it. Everyone knows
it's madness, and every country has an excuse.” — Carl Sagan, Cosmos, Episode 13: Who Speaks for Earth?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten