Kiểm tra xem mục có trong một mảng / danh sách không


203

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

if [check that item is in array]:

3
Tôi nghĩ rằng câu hỏi đã được trả lời ở đây
Tarun Ande

1
Hoặc tốt hơn ở đây: stackoverflow.com/questions/12934190/ từ
torina

Câu trả lời:


396

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

Điều này làm việc cho bất kỳ bộ sưu tập, không chỉ cho danh sách. Đối với từ điển, nó kiểm tra xem khóa đã cho có trong từ điển hay không.


1
@jdi và vòng lặp đó sẽ chạy nhanh hơn nhiều so với vòng lặp được mã hóa rõ ràng trong Python, chưa kể dễ đọc hơn.
Đánh dấu tiền chuộc

17

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 sẽ thực hiện kiểm tra lặp đi lặp lại trong danh sách, thì có thể đáng để chuyển đổi nó thành tập hợp hoặc frozenet, có thể nhanh hơn cho mỗi lần kiểm tra. Giả sử danh sách các str của bạn được gọi là subjects:

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

3

Sử dụng chức năng lambda.

Giả sử bạn có một mảng:

nums = [0,1,5]

Kiểm tra xem 5 có trong nums:

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

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

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

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

Điều này hoạt động với Python2. Với Python 3.7, bạn sẽ gặp lỗi này:TypeError: object of type 'filter' has no len()
Jun711

1

Bạn phải sử dụng .values ​​cho mảng. ví dụ: giả sử bạn có khung dữ liệu có tên cột, ví dụ: kiểm tra ['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 phải sử dụng .values


Tôi nghĩ bạn cần một đối tượng Pandas DataFrame để sử dụng .values.
troymyname00

-3

Bạn cũng có thể sử dụng cú pháp tương tự cho một mảng. Ví dụ: tìm kiếm trong một loạt Pandas:

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

if item in ser.values:
    # do stuff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.