2016-09-27 70 views
0

我想知道是否有可能在python 3的列表理解中獲得範圍的長度,以便設置一個條件語句? 此代碼不起作用在Python中獲取範圍的長度List Comprehension

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

如果你把長度條件的'if'自帶的'for'(這意味着如果條件不滿足後,該項目被跳過),你可能應該縮短'範圍'。如果你做了'range(5)'(並省略了長度檢查),你會得到你想要的結果。事實上,你可以執行'range(0,5,2)'並跳過檢查的x%2 == 0'部分。 – Blckknght

+0

確定'x'是否大於一半長度,或者您是否只需要'range'的後半部分,是真正的測試嗎?也就是說,你想要什麼'range(10,20)';每個值都大於長度的一半,所以你想保留所有的值('x> len(therange)/ 2')還是要保留後半部分? – ShadowRanger

+0

@Blckknght:同意(儘管等效代碼將基於'範圍(6,10,2)',而不是'range(5)'或'range(0,5,2)'。 ''範圍'蓋帽,通過'n'的上限計算出'n // 2 + 1&〜1'的起點(如果需要,可以舍入到最後) – ShadowRanger

回答

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

我瞭解以上所有評論,並欣賞但是,@ GBR24已經回答了我的需求,我希望利用這個邏輯來創建比我提供的列表更復雜的列表,再次感謝您的回覆 - Erik –

+0

您可以將我的答案標記爲已接受:)。 ..當x'2 == 0且x> len(list(range(10))時,'b = [x ** 2代表x在範圍內(10)),肯定有更復雜的方法來執行您想要的操作。/2]',但是KISS的原則勝出。 – blacksite