我有一个数字列表:
我希望检查'a'中的数字是否符合'b'中的任一条件,如果符合,则将这些数字放入列表'c'中。
在上述情况下:
我创建了这段代码,看起来能够实现我想要的功能:
a = [3, 6, 20, 24, 36, 92, 130]
以下是条件列表:
b = ["2", "5", "20", "range(50,100)", ">120"]
我希望检查'a'中的数字是否符合'b'中的任一条件,如果符合,则将这些数字放入列表'c'中。
在上述情况下:
c = [20, 92, 130]
我创建了这段代码,看起来能够实现我想要的功能:
c = []
for x in a:
for y in b:
if "range" in y:
rangelist = list(eval(y))
if x in rangelist:
c.append(x)
elif ">" in y or "<" in y:
if eval(str(x) + y):
c.append(x)
else:
if x == eval(y):
c.append(x)
然而,我的列表'a'可能非常大。
有没有更简单、更快速的方法来获取我想要的东西?
b
更改为有效的条件,例如=20
或在范围(50,100)内
? - Mureinikb
列表里似乎更加简洁,而不是进行一堆拙劣的字符串操作和eval
。 - user2357112lambda x: x > 120
或lambda x: 50 <= x < 100
这样的东西。 - user2357112a -> [(a -> b)] -> [b]
类型的反向映射(这可能是Haskell stdlib中的内容,但我找不到),可在此处查看我的解决方案。 - Adam Smith