2012-08-31 15 views
6

Powiedz, że wszystkie w, x, y i z mogą znajdować się na liście A. Czy istnieje skrót umożliwiający sprawdzenie, czy zawiera on tylko ? bez negowania innych zmiennych?Sprawdź, czy lista zawiera tylko element x

w, x, yiz są jedynymi wartościami (nie listami, krotkami itp.).

+0

Czy w, x, yiz są pojedynczymi wartościami lub listami? –

+0

@SteveMayne Wszystkie pojedyncze wartości. – idlackage

+1

Żeby było jasne, przez "wszystkie pojedyncze wartości", masz na myśli takie rzeczy jak 'int' i' float' i 'str'ings, czy może (np.)' Y' być 'listą'? – DSM

Odpowiedz

15
A=[w,y,x,z] 
all(p == x for p in A) 
4

ten sprawdza, czy wszystkie element sw A są równe x bez odniesienia do jakichkolwiek innych zmiennych:

all(element==x for element in A) 
+0

Myślę, że może to być wiele x- –

2

Jeżeli wszystkie pozycje na liście są hashable:

set(A) == set([x]) 
+0

, jest to trochę nieefektywne, ponieważ musisz obliczyć zestaw, zamiast tylko iterować przez 'A' raz – Claudiu

+0

Tak. Po prostu bardziej zwarty. –

+0

W nowszych wersjach można użyć cukru '{x}'. – sdcvvc

0

I "nie jestem pewien, co bez negacji innych zmiennych oznacza, ale podejrzewam, że to jest to, w co Mrówka:

if all(item == x for item in myList): 
    #do stuff 
2
{x} == {w,x,y,z} & set(A) 

to będzie działać, jeśli wszystko [w,x,y,z] i przedmioty w A są hashable.

0

Herezje inny sposób:

>>> [x] * 4 == [x,w,z,y] 

od wielu już wspomniano.

0

Istnieją dwie interpretacje na to pytanie:

pierwsze, czy wartość x zawarte w [W, Y, Z]:

>>> w,x,y,z=1,2,3,2 
>>> any(x == v for v in [w,y,z]) 
True 
>>> w,x,y,z=1,2,3,4 
>>> any(x == v for v in [w,y,z]) 
False 

Albo może to oznaczać, że reprezentują one ten sam przedmiot :

>>> w,x,y,z=1,2,3,4 
>>> any(x is v for v in [w,y,z]) 
False 
>>> w,x,y,z=1,2,3,x 
>>> any(x is v for v in [w,y,z]) 
True 
10

To, lub jeśli nie chcemy mieć do czynienia z pętlą:

>>> a = [w,x,y,z] 
>>> a.count(x) == len(a) 
+0

Znalazłem tę metodę 5 razy szybciej niż zaakceptowana odpowiedź. –

Powiązane problemy