检查列表是否仅包含来自给定的"允许的"名单

时间:2015-07-29 18:57:14

标签: python list

我有一半期待被欺骗"就此而言。但是,似乎没有这样的Pythonic"大脑运动"在SO中,甚至在其他语言中。

说我有一个"允许"列出[ 45, 6, 155, 44 ]并提交一个列表[ 6, 44, 19, 12 ]:我想知道一个有效,优雅且完美的算法来获得结果:

LEGAL: [ 6, 44 ]
ILLEGAL: [ 19, 12 ]

PS目前正在使用2.7但3.x答案也是受欢迎的!

4 个答案:

答案 0 :(得分:5)

permissible = [45, 6, 155, 44]

保留重复的值:

legal = []
illegal = []
for item in submission:
    if item in permissible:
        legal.append(item)
    else:
        illegal.append(item)

或者,如果您正在处理独特的,可清除的值:

legal = set(submission) & set(permissible)
illegal = set(submission) - set(permissible)

答案 1 :(得分:0)

这对你有用。

permissible = [ 45, 6, 155, 44 ]
def get_legal(permissible, input):
    legal = [x for x in input if x in permissible]
    illegal = [x for x in input if x not in permissible]
    return legal, illegal

答案 2 :(得分:0)

legal值保存为set,然后将要检查的任何列表转换为集合,并确保legaltry-catch

答案 3 :(得分:0)

我会建议这个解决方案

some_list = [1,2,3,4]
permissible = [1,2]

legal = [x for x in some_list if x in permissible]
ilegal = [x for x in some_list if x not in permissible]

希望这有帮助!