2012-05-19 22 views
37

Bir liste a=[1,2,3] var Ve bunun sayıların en az birinin bu bir gibi başka listede varsa bilmek istiyorsunuz diyelim:, bilmek istiyorum Başka bir deyişle b=[4,5,6,7,8,1] eğer 1,2 veya b listesinde 3 var (lar). Ben şimdiListede en az bir öğenin başka bir listede olup olmadığını kontrol etmek için tek liner?

def func(a, b): 
    for i in a: 
     if i in b: 
      return True 
    return False 

Ama böyle bir şey muhtemelen şeyler derli toplu hale getirmek için tek satırda koymak için bir yol var yapabilirdi?

cevap

41

Bunu yapmanın birçok yolu vardır. en doğrudan çevirisidir:

a olmanın hashable unsurları bağlıdır, ancak
any_in = lambda a, b: bool(set(a).intersection(b)) 

(eğer bu doğruysa, o':

any_in = lambda a, b: any(i in b for i in a) 

Ayrıca gibi setleri içeren çeşitli şeyler kullanabilirsiniz muhtemelen bu yaklaşımlardan herhangi biri için a ve b'dan daha büyük bir set yapmak daha hızlı olacaktır.

Düzenleme: isdisjoint, Python 2.6 ve üzeri için aşağıdaki çeşitli kişiler tarafından belirtildiği gibi intersection'dan daha iyidir. Bunu öğrenmek için sevindim. :)

32

basit tek liner olacaktır:

any(i in b for i in a) 
+3

iyi pythonic çözüm – clg4

5

kümelerine listelerinizi dönüştürerek onlara ayar işlemlerini gerçekleştirebilir. Eğer kesişim 0'dan büyükse, en az bir eleman eşleştirmeniz gerekir:

len(set(a) & set(b)) > 0 
+0

Aynı fikir diğer varyasyonları: 'bool (set (a) ve (b) ')' veya basitçe 'set (a) & 2.3 ve altındakiler için (b) ' – johnP

2

Bu işe yarayacaktır. Yukarıda

def func(a, b): 
    return any([i in b for i in a]) 
52

Python 2.6 ve:

def func(a, b): 
    return not set(a).isdisjoint(b) 

2.4 veya 2.5: Aşağıda verilen 2.3 ile için

def func(a, b): 
    return len(set(a).intersection(b)) != 0 

:

sudo apt-get update 
sudo apt-get upgrade 

;)

+9

'a kadar destek. Bu komik oldu: D ... – mkab

+4

doğru cevabı LOLs –

11

Bu ayar sorundur, liste sorunu değil. Doğru veri türüyle, cevap :-) hemen aşikar genellikle

def func(a, b): 
    return not set(a).isdisjoint(b) 
+0

için bir set sorun olduğunu söyleyen kadar? Ya [a, a, a, b] ve 'a [a, a, b]. İlk listede bir "a" öğesi var, ancak ikinci değil. –

İlgili konular