使用列表推导从列表中排除某个范围内的项目

时间:2018-01-15 01:31:01

标签: python list

我有两个列表:a = [10.0,20.0]b = [1.0,10.0,15.0,20.0,30.0,100.0]。 如何从列表b中删除10.020.0之间的所有元素?这是我试过的:

c = [b[y] for y in range(len(b)) if (b[y] < a[0] or b[y] > a[1])]

我希望获得c = [1.0, 30.0, 100.0],但我得到c = [1.0,10.0,15.0,20.0,30.0,100.0]

如何仅使用列表推导从列表中排除某个范围内的组件?

4 个答案:

答案 0 :(得分:4)

您可以通过直接迭代b的元素来简化,但您的原始代码也适用于我:

a = [10.0, 20.0]
b = [1.0, 10.0, 15.0, 20.0, 30.0, 100.0]

c = [x for x in b if x < a[0] or x > a[1]]
# [1.0, 30.0, 100.0]

# Your version:
c = [b[y] for y in range(len(b)) if (b[y] < a[0] or b[y] > a[1])]
# [1.0, 30.0, 100.0]

答案 1 :(得分:2)

从相反的角度思考,只包括某个范围内的组件,如下所示:

c = [y for y in b if (y < a[0] or y > a[1])]

答案 2 :(得分:2)

您可以使用filter

a = [10.0,20.0]
b = [1.0,10.0,15.0,20.0,30.0,100.0]
new_a = list(filter(lambda x:x < a[0] or x > a[-1], b))

输出:

[1.0, 30.0, 100.0]

答案 3 :(得分:-2)

过滤功能将为您完成此操作:

c= filter(lambda x: x<10.0 or x>20.0,b)