Wie kann ich ein Tupel erstellen, in dem jedes Mitglied durch einen Ausdruck verglichen wird?

8

Nun, hier ist die Sache:

Ich habe den folgenden Haskell Code, diesen:

%Vor%

Was zurückkommt

%Vor%

Für diejenigen, die damit nicht vertraut sind, erkläre ich:

  • Er gibt eine tuple (a, b, c) zurück, wobei jede dieser "Definitionen" (a, b, c) eine Liste (1 bis 10) erhält und ihre Mitglieder durch a ^ 2 + b ^ 2 == c ^ 2 ? verglichen werden. Ausdruck (jedes Mitglied).

Wie kann ich in Python / Ruby das gleiche tun (wenn möglich eine Zeile)?

P.S .: sie werden in lexikographischer Reihenfolge verglichen.

    
luizfonseca 21.08.2011, 07:12
quelle

5 Antworten

12

Das ist in Python mit einer langen Zeile und ohne Import möglich. Pythons Listen-Comprehensions kann mit mehreren Variablen verwendet werden:

%Vor%     
Luke Woodward 21.08.2011 07:21
quelle
11

Ruby-Lösung:

%Vor%     
Victor Deryagin 21.08.2011 07:23
quelle
9

Python-Lösung unter Verwendung von itertools.product , was äquivalent zu geschachtelten for-Schleifen in ist ein Generatorausdruck:

%Vor%     
zeekay 21.08.2011 07:48
quelle
5

Eine Ruby-Alternative, ohne identische Bereiche zu erzwingen:

%Vor%

Sie können argumentieren, dass dies nicht das erwartete Ergebnis zurückgibt, weil Sie c- & gt; b- & gt; a verwenden, um zu iterieren, aber zurückzukehren (a, b, c). Also ich habe Angst in Ruby, keine Listen-Comprehensions, müssen wir so etwas tun (map_select = Karte + kompakt):

%Vor%

Nicht Vanille Ruby, aber mit der coolen Lazylist können Sie schreiben:

%Vor%     
tokland 21.08.2011 07:44
quelle
1
%Vor%

Ein Clojure-Beispiel für dasselbe.

    
isakkarlsson 21.08.2011 08:21
quelle

Tags und Links