Đối với câu hỏi đầu tiên của bạn: mã đó hoàn toàn tốt và sẽ hoạt động nếu item
bằng một trong các yếu tố bên trong myList
. Có thể bạn cố gắng tìm một chuỗi không khớp chính xác với một trong các mục hoặc có thể bạn đang sử dụng một giá trị float bị thiếu chính xác.
Đối với câu hỏi thứ hai của bạn: Thực sự có một số cách có thể nếu "tìm" những thứ trong danh sách.
Kiểm tra nếu có cái gì đó bên trong
Đây là trường hợp sử dụng mà bạn mô tả: Kiểm tra xem có thứ gì đó nằm trong danh sách hay không. Như bạn biết, bạn có thể sử dụng in
toán tử cho điều đó:
3 in [1, 2, 3] # => True
Lọc một bộ sưu tập
Đó là, tìm tất cả các yếu tố trong một chuỗi đáp ứng một điều kiện nhất định. Bạn có thể sử dụng hiểu danh sách hoặc biểu thức trình tạo cho điều đó:
matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
Cái sau sẽ trả về một trình tạo mà bạn có thể tưởng tượng như một loại danh sách lười biếng sẽ chỉ được xây dựng ngay khi bạn lặp qua nó. Nhân tiện, cái đầu tiên chính xác tương đương với
matches = filter(fulfills_some_condition, lst)
trong Python 2. Ở đây bạn có thể thấy các hàm bậc cao hơn tại nơi làm việc. Trong Python 3, filter
không trả về một danh sách, mà là một đối tượng giống như trình tạo.
Tìm sự xuất hiện đầu tiên
Nếu bạn chỉ muốn điều đầu tiên phù hợp với một điều kiện (nhưng bạn không biết nó là gì), thì tốt nhất là sử dụng vòng lặp for (có thể sử dụng else
mệnh đề này, điều này không thực sự nổi tiếng). Bạn cũng có thể dùng
next(x for x in lst if ...)
sẽ trả lại trận đấu đầu tiên hoặc tăng StopIteration
nếu không tìm thấy. Ngoài ra, bạn có thể sử dụng
next((x for x in lst if ...), [default value])
Tìm vị trí của một mặt hàng
Đối với danh sách, cũng có index
phương pháp đôi khi có thể hữu ích nếu bạn muốn biết vị trí của một yếu tố nào đó trong danh sách:
[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
Tuy nhiên, lưu ý rằng nếu bạn có các bản sao, .index
luôn trả về chỉ số thấp nhất: ......
[1,2,3,2].index(2) # => 1
Nếu có trùng lặp và bạn muốn tất cả các chỉ mục thì bạn có thể sử dụng enumerate()
thay thế:
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
myList
.