2016-09-27 45 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