我有一半期待被欺骗"就此而言。但是,似乎没有这样的Pythonic"大脑运动"在SO中,甚至在其他语言中。
说我有一个"允许"列出[ 45, 6, 155, 44 ]
并提交一个列表[ 6, 44, 19, 12 ]
:我想知道一个有效,优雅且完美的算法来获得结果:
LEGAL: [ 6, 44 ]
ILLEGAL: [ 19, 12 ]
PS目前正在使用2.7但3.x答案也是受欢迎的!
答案 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
,然后将要检查的任何列表转换为集合,并确保legal
为try-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]
希望这有帮助!