我有两个列表:a = [10.0,20.0]
和b = [1.0,10.0,15.0,20.0,30.0,100.0]
。
如何从列表b
中删除10.0
和20.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]
。
如何仅使用列表推导从列表中排除某个范围内的组件?
答案 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)