2016-07-30 7 views
1

Ich habe recherchiert und versuchte den folgenden Code. Es funktioniert fast, aber ich möchte nur die fortlaufenden Nummern im Ergebnis. Das wäre [100,101,102]. Ich will die [75], [78], [109] nicht im Ergebnis haben. So wählen Sie nur fortlaufende Nummern aus einer Liste mit Python

from operator import itemgetter 
from itertools import groupby 
data = [75, 78, 100, 101, 102, 109] 
for k, g in groupby(enumerate(data), lambda (i,x):i-x): 
    print map(itemgetter(1), g) 

Der Druck von oben aus ist:
[75]

[78]

[100, 101, 102]

[109]

Was können Ich tue nur [100, 101, 102]?

+1

Wenn der erste Nummer war '77' statt' 75', möchtest du es auch? – zondo

+0

'Filter (Lambda x: len (x)> 1)'? – Mephy

+0

Vielleicht 'cons = map (itemgetter (1), g) 'und dann' if len (cons)> 1: cons drucken' – zondo

Antwort

2

g In Ihrem Beispiel ist das iterierbare Element (z. B. [75] oder [100, 101, 102]). Wenn Sie nur fortlaufende Nummer s möchten, klingt es wie Sie alle g s, wo es mehr als ein Elemente in gg drucken möchten, ist eigentlich ein iterable, aber wir können es schnell in eine Liste mit konvertieren list() für eine triviale Menge von Elementen. Wir werden nur die Inhalte speichern müssen, weil ein Element nicht zweimal gelesen werden kann von einem Iterator]

Versuchen Sie, die print map(itemgetter(1), g) in einer if-Anweisung Einwickeln, wie zum Beispiel:

x = list(g) 
if len(x) > 1: 
    print map(itemgetter(1), x) 
+0

Das funktioniert. Vielen Dank. vom Bediener import itemgetter aus itertools importieren groupby data = [75,78,100,101,102,103,109] für k, g in groupby (Aufzählen (Daten), lambda (i, x): ix): x = list (g) wenn Len (x)> 1: Karte drucken (itemgetter (1), x) – Rico

Verwandte Themen