2016-05-22 9 views
0

Dies ist wahrscheinlich etwas trivial, aber ich kann nicht scheinen, eine anständige Lösung zu finden und/oder ich suche nach dem Falschen.Python Lambda-Ausgabe

Als ich nenne das:

validation_data = validation.map(tuple)

ich die folgende Ausgabe:

[(61.0, 3864.0), (61.0, 3889.0)] 

Ich möchte eigentlich das Ergebnis Ganze Zahlen sein, also habe ich den Code auf diese statt:

validation_data = validation.map(lambda xs: [int(x) for x in xs]) 

Aber jetzt ändert sich das Format der Ausgabe s (beachten Sie, es ist jetzt eckige Klammern wie ein Array statt glatte Klammern)

[[61, 3864], [61, 3889]] 

Ich bin nicht sicher, was hier passiert. Warum ändert sich das Ausgabeformat? Und wie behalte ich das Original [()] Format statt [[]]?

+1

Was 'validation' ist? –

+0

Das sind eckige Klammern. Winkelklammern wären '<>'. –

+0

Bearbeitete die Post. :) – sweaves

Antwort

2

Dies ist im Wesentlichen nur die erste Aussage in Ihrer Frage mit der zweiten zu kombinieren. Entweder hatten Sie beim ersten Mal nur runde Klammern, weil Sie tuple verwendet haben oder die erste Anweisung redundant war.

Beachten Sie, dass tuple(int(x) for x in xs) eine spezielle Funktion der Python-Syntax ist. Es ist kurz für tuple((int(x) for x in xs)). Dieses Argument ist ein Generatorverständnis, und wenn eine Funktion ein einzelnes Argument hat, das ein Generatorverständnis ist, können Sie die zusätzlichen runden Klammern entfernen. tuple([int(x) for x in xs]) würde auch funktionieren und wäre näher an Ihrem Code.

Sie könnten auch tun:

validation_data = validation.map(lambda xs: tuple(map(int, xs))) 
+0

Das hat es, danke. – sweaves