2016-09-27 3 views
0

Ich frage mich, ob es möglich ist, die Länge des Bereichs in einem Listenverständnis in Python 3 zu erhalten, um eine bedingte als solche einzurichten? dieser Code funktioniert nichtGet Länge des Bereichs in Python List Comprehension

b = [x**2 for x in range(10) if x % 2 == 0 and x > len/2] 
+0

Wenn Sie die Länge Zustand in einem 'setzen sind if' dass kommt nach dem' for' (was bedeutet, dass, wenn die Bedingung nicht erfüllt ist, das Element wird übersprungen), Sie sollten wahrscheinlich die 'Reichweite' kurzschließen. Wenn Sie 'range (5)' (und die Längenprüfung weggelassen haben), erhalten Sie genau die gewünschten Ergebnisse. In der Tat könnten Sie 'range (0, 5, 2)' machen und den 'x% 2 == 0' Teil des Checks überspringen. – Blckknght

+0

Ist der echte Test, um festzustellen, ob 'x' größer als die halbe Länge ist, oder wollen Sie nur die zweite Hälfte des' Bereichs'? Das heißt, was willst du für 'range (10, 20)'; jeder Wert ist größer als die Hälfte der Länge, also willst du alle behalten ('x> len (theange)/2') oder willst du die zweite Hälfte behalten? – ShadowRanger

+0

@Blckknght: Einverstanden (obwohl der äquivalente Code auf 'range (6, 10, 2)', nicht 'range (5)' oder 'range (0, 5, 2)' basieren würde. Dies könnte beliebig automatisiert werden 'range' caps indem eine cap von 'n' genommen wird und der start mit' n // 2 + 1 & ~ 1' berechnet wird (Runden auf even, aufgerundet falls nötig) – ShadowRanger

Antwort

2
>>> n = 10 
>>> b = [x**2 for x in range(n) if x % 2 == 0 and x > n/2] 
>>> b 
[36, 64] 
+0

Ich verstehe alle obigen Kommentare und schätze die Antworten, @ GBR24 hat es jedoch ausreichend beantwortet.Ich möchte diese Logik für komplexere Listen verwenden als die, die ich zur Verfügung gestellt habe.Ich danke nochmals für Ihre Antworten.- Erik –

+0

Sie könnten meine Antwort als akzeptiert markieren :). .. Es gibt sicherlich komplexere Möglichkeiten, um das zu tun, was Sie wollten, zB 'b = [x ** 2 für x im Bereich (10) wenn x% 2 == 0 und x> len (Liste (Bereich (10)))/2] ', aber das Prinzip von KISS hat Vorrang. – blacksite

Verwandte Themen