2012-06-28 7 views
124

Nếu tôi có một chuỗi các chuỗi, tôi có thể kiểm tra xem chuỗi có nằm trong mảng mà không thực hiện vòng lặp for không? Cụ thể, tôi đang tìm kiếm một cách để làm điều đó trong một tuyên bố if, vì vậy một cái gì đó như thế này:Kiểm tra xem mục có nằm trong một mảng/danh sách

if [check that item is in array]: 
+1

Tôi nghĩ câu hỏi là đã được trả lời [ở đây] (http://stackoverflow.com/questions/9542738/python-find-in-list) –

+0

Hoặc tốt hơn ở đây: http://stackoverflow.com/questions/12934190/is-there-a-short -contains-function-for-lists – torina

+0

Bản sao có thể có của [Cách nhanh nhất để kiểm tra xem giá trị có tồn tại trong danh sách] không (https://stackoverflow.com/questions/7571635/fastest-way-to-check-if-a- giá trị tồn tại trong một danh sách) –

Trả lời

242

Giả sử bạn có nghĩa là "danh sách", nơi bạn nói "mảng", bạn có thể làm

if item in my_list: 
    # whatever 
+45

... đó là nó? Tôi đã được Googling trong 20 phút bây giờ .... – SomeKittens

+2

@SomeKittens: danh sách sẽ thực hiện vòng lặp riêng của mình để kiểm tra tư cách thành viên. – jdi

+1

@jdi và vòng lặp đó sẽ chạy nhanh hơn nhiều so với mã được viết rõ ràng bằng Python, chưa kể đến việc dễ đọc hơn. –

15

Tôi cũng sẽ giả định rằng bạn có nghĩa là "danh sách" khi bạn nói "mảng". Giải pháp của Sven Marnach là tốt. Nếu bạn định thực hiện kiểm tra lặp lại trong danh sách, thì có thể chuyển đổi nó thành một tập hợp hoặc frozenset, có thể nhanh hơn cho mỗi lần kiểm tra. Giả sử danh sách các đường được gọi là subjects:

subject_set = frozenset(subjects) 
if query in subject_set: 
    # whatever 
-1

Bạn cũng có thể sử dụng cùng cú pháp cho mảng. Ví dụ: tìm kiếm trong chuỗi Pandas:

ser = pd.Series(['some', 'strings', 'to', 'query']) 

if item in ser.values: 
    # do stuff 
0

Sử dụng hàm lambda.

Hãy nói rằng bạn có một mảng:

nums = [0,1,5] 

Kiểm tra xem 5 là trong nums:

(len(filter (lambda x : x == 5, nums)) > 0) 

Giải pháp này là mạnh mẽ hơn. Bây giờ bạn có thể kiểm tra xem có bất kỳ số nào thỏa mãn một điều kiện nhất định nằm trong mảng của bạn nums.

Ví dụ, kiểm tra xem bất kỳ con số đó là lớn hơn hoặc bằng 5 tồn tại trong nums:

(len(filter (lambda x : x >= 5, nums)) > 0) 
0

Bạn phải sử dụng .values ​​cho mảng. ví dụ nói rằng bạn có dataframe trong đó có một nghĩa là tên cột, thử nghiệm [ 'Tên'], bạn có thể làm

if name in test['Name'].values : 
    print(name) 

cho một danh sách bình thường bạn không cần phải sử dụng .values ​​