同时使用if和for列表理解

时间:2017-10-03 02:09:19

标签: python python-2.7 list-comprehension

我有一个数组,a = [1,2,3,4,5,6,7],我试图找到所有小于6且大于2的值的索引,使用list理解。 我使用以下技术:

tk = [b if (a[b]>=2 & [b]<=6) for b in range(len(a))]

它一直说'for'存在语法错误。 知道如何解决这个问题吗?或者我做错了什么?

3 个答案:

答案 0 :(得分:3)

这应该足以做到这一点:

>>> indices = [i for i, x in enumerate(a) if 2 < x < 6]
>>> indices
[2, 3, 4]

答案 1 :(得分:1)

下面的代码可以使用

  tk = [b for b in range(len(a)) if (a[b]>= 2 and a[b] <= 6)]
  tk
  [1, 2, 3, 4, 5]

我在这里修改了3件事:

  1. 我们应该用条件
  2. 调用列表理解
  3. 而不是使用[b]使用a [b]
  4. 使用而不是&amp;
  5. 希望这会有所帮助

答案 2 :(得分:0)

在理解中放置条件对我来说一直是一个非常混乱的点,所以我想出了一个工作的助记设备。

如果要从列表中排除元素,if属于循环,并且在for之后:

[item for item in items if condition]

如果你在两个值之间做出决定,这只是一个正常的ternary operator,它在for之前显示为理解的一部分:

[item1 if condition else item2 for item1, item2 in items]

您的案例显然是第一个,因为您排除了元素。因此,测试应该在for之后,并使用适当的语法修复:

tk = [b for b in range(len(a)) if (2 <= a[b] <= 6)]

使用enumerate实现相同操作来获取索引而不是range可能更直观:

tk = [item for index, item in enumerate(a) if 2 <= index <= 6]