【发布时间】:2018-05-09 17:09:31
【问题描述】:
我有一个数字列表:
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或in range(50,100)这样的有效条件吗? -
将函数放在
b列表中似乎更简洁,而不是进行一堆乱七八糟的字符串操作和eval。 -
lambda x: x > 120或lambda x: 50 <= x < 100之类的东西。 -
这是在 Haskell 中的一个有趣的练习,因为它涉及定义一个
a -> [(a -> b)] -> [b]类型的反向映射(这可能在 Haskell 标准库中,但我找不到它)。 See my solution here
标签: python python-3.x list list-comprehension