2012-08-31 47 views
6

Giả sử tất cả w, x, y và z có trong danh sách A. Có phím tắt để kiểm tra xem nó có chứa chỉ x - ví dụ. mà không phủ nhận các biến khác?Kiểm tra xem danh sách chỉ chứa mục x

w, x, y và z là tất cả các giá trị đơn lẻ (không phải danh sách, bộ dữ liệu, v.v ...).

+0

Có phải tất cả các giá trị hoặc danh sách đơn đều là w, x, y và z không? –

+0

@SteveMayne Tất cả các giá trị đơn lẻ. – idlackage

+1

Chỉ cần rõ ràng, bằng "tất cả các giá trị đơn", bạn có ý nghĩa như 'int' và' float' và 'str'ings, hoặc có thể (ví dụ)' y' là một 'danh sách'? – DSM

Trả lời

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

này sẽ kiểm tra tất cả các element s trong A đều bình đẳng để x mà không tham chiếu đến bất kỳ biến khác:

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

Tôi nghĩ rằng nó có thể bao gồm nhiều x –

2

Nếu tất cả các mục trong danh sách là hashable:

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

điều này là một chút không hiệu quả như bạn phải tính toán các thiết lập thay vì chỉ iterating qua 'A' một lần – Claudiu

+0

Yep. Nhỏ gọn hơn. –

+0

Trong các phiên bản mới hơn, bạn có thể sử dụng '{x}' đường. – sdcvvc

0

tôi 'không chắc chắn những gì mà không phủ nhận các biến khác có nghĩa là, nhưng tôi nghi ngờ rằng đây là những gì bạn w ant:

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

Điều này sẽ có tác dụng nếu tất cả các [w,x,y,z] và các mặt hàng trong A là hashable.

0

Heres một cách khác:

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

của nhiều người đã tuyên bố.

0

Có hai cách giải thích cho câu hỏi này:

Thứ nhất, là giá trị của x chứa trong [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 

Hoặc nó có thể có nghĩa rằng họ đại diện cho cùng một đối tượng :

>>> 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

đó, hoặc nếu bạn không muốn để đối phó với một vòng lặp:

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

Tôi thấy phương pháp này nhanh hơn 5 lần so với câu trả lời được chấp nhận. –

Các vấn đề liên quan