6 Stimmen

Zählen doppelter Ganzzahlen in Python

Wie finde ich die Gesamtzahl der Duplikate in einer Zeichenkette? d.h., wenn es war j= [1,1,1,2,2,2] es würde finden 4 Duplikate? Ich konnte nur eine Zählung finden, die anzeigt, wie oft jede einzelne Zahl vorkam.

17voto

SilentGhost Punkte 285785
>>> j= [1,1,1,2,2,2]
>>> len(j) - len(set(j))
4

Und im Übrigen, j eine Liste und keine Zeichenkette ist, obwohl das für den Zweck dieser Übung nicht wirklich wichtig ist.

8voto

Es scheint bereits eine gängige Antwort zu geben, aber wenn Sie auch die Anzahl der einzelnen Duplikate beibehalten möchten, kann die neue Counter() collection-Objekt in Python 2.7 ist dafür perfekt geeignet.

>>> from collections import Counter

>>> j = [1,1,1,2,2,2]

>>> Counter(j)
Counter({1: 3, 2: 3})

>>> sum([i - 1 for i in c.values() if i > 1])
4

>>> {k: v - 1 for k, v in c.items()} # individual dupes
{1: 2, 2: 2}

Es gibt eine Backport für Zähler bei ActiveState

1 Stimmen

Einige Vorschläge/Bemerkungen: Man muss davon ausgehen, dass c = Counter(j) irgendwo da drin ausgeführt wird. Mit deinem Summen-Dingsbums benötigst du Python 2.7, daher kannst du die [] . Zweitens ist die "wenn"-Klausel überflüssig. Drittens ist es sinnlos, die Liste zu erstellen. c.values() . Ergebnis: sum(i - 1 for i in c.itervalues()) oder nach etwas Algebra, versuchen Sie sum(c.itervalues()) - len(c) . Versuchen Sie, ein Nicht-Dupe, z.B. 3, in die Eingabe einzufügen. Prüfen Sie, ob Ihr Wörterbuch der einzelnen Dupes wirklich das ist, was Sie beabsichtigen. HTH.

0 Stimmen

OK Sagen Sie mir erstens, wie i > 1 ist "überflüssig"? I brauchen zu verhindern i < 0 für den Fall, dass negative ganze Zahlen in das Diktat gelangen sollten. Der Vergleich findet also trotzdem statt. Betrachten wir nun eine Liste mit 1M Einträgen, von denen 999.000 sind 0 und mir dann sagen, ich solle nicht weitermachen und verhindern. 0 auch vom Anhängen an die Liste. "Nach etwas Algebra" hört sich an, als ob Sie mir sagen wollen, dass ich es lernen muss, aber wie ich gerade sagte, möchte ich sichergehen, dass -1000000 nicht zum Diktat gehört, falls etwas anderes als Counter() modifiziert sie.

0 Stimmen

Zweitens, meine Verwendung Counter() benötigt nicht unbedingt 2.7, da ich einen Link zum Backport eingefügt habe. (Ich verwende ein Diktat-Verständnis, aber das kann sehr schnell geändert werden). Daher kann ich oder nicht in der Lage sein, "verlieren die [] "... Aber was bedeutet das Materie ? Drittens, itervalues / iteritems war für dieses einfache Beispiel nutzlos und schwieriger zu tippen, also verzeihen Sie mir. Und schließlich habe ich keine Ahnung, was Sie mit einer Nicht-Dupe 3 meinen... Es würde ausdrucken ..., 3: 0} und das kann, muss aber nicht genau das sein, was der OP und andere die in dieser Situation passieren sollen. i > 0 dann?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X