我有一个数组,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'存在语法错误。 知道如何解决这个问题吗?或者我做错了什么?
答案 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件事:
希望这会有所帮助
答案 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]