2011-02-11 40 views
2

L = [1,2,3,4]成为我们的列表。python中的多参数'in'

然后1 in LTrue2 in L也是True

有没有一种干净的方式来写(1,2) in L并使它出现真实?

也就是说,给出一个列表L和测试列表T和关系多的,如果T所有成员都在L,然后T multi-in LTrue,否则T multi-in LFalse

当然,我可以写一个多功能的,但看起来很丑。

回答

8

你要正确对待(1,2)Lset S:

set((1,2)).issubset(L) 

,或者更好,如果你了解的符号:

set((1,2)) <= set(L) 
+0

这很不错! – 2011-02-11 18:43:57

3

如何:

set((1,2)).issubset(L) 
3

使用套:

s = set([1,2]) 
    l = set([1,2,3,4]) 

    s.issubset(l) 

.issubset()方法会告诉你一个集合中的所有元素是否存在于另一个集合中。

1

以上的答案很好。另一种可能性是:

all(x in L for x in [1,2,3,4]) 

我不是荷兰人,但这是对我来说“唯一明显的做法”。

5
all(x in L for x in [1, 2]) 

不同于基于集合的解决方案,则该(1)的短curcuits一旦元件被没有发现,(2)适用于unhashable类型和(3)中读出漂亮;)

我们可以通过返回设置来改进复杂性(O(n*m))...虽然以不同的方式:预先将L转换为一组,然后您将获得O(1)成员资格测试(无需第二组检查项目) 。

+0

我们知道`issubset`或`<=`不会短路吗? – 2011-02-11 19:06:58