Cách tốt nhất để tìm chỉ mục của phần tử trong một mảng trong python là gì? Lưu ý rằng mảng có thể không được sắp xếp. Có cách nào để chỉ định toán tử so sánh nào cần sử dụng không?Python: tìm phần tử trong một mảng
Trả lời
Cách tốt nhất có thể là sử dụng phương pháp danh sách .index.
Đối với các đối tượng trong danh sách, bạn có thể làm một cái gì đó như:
def __eq__(self, other):
return self.Value == other.Value
với bất kỳ chế biến đặc biệt mà bạn cần.
Bạn cũng có thể sử dụng một cho/trong bản Tuyên Bố với enumerate (arr)
Ví dụ về việc tìm kiếm các chỉ số của mặt hàng mà có giá trị> 100.
for index, item in enumerate(arr):
if item > 100:
return index, item
Có phương pháp index
, i = array.index(value)
, nhưng tôi không nghĩ bạn có thể chỉ định toán tử so sánh tùy chỉnh. Sẽ không khó để viết chức năng của riêng bạn để làm như vậy, mặc dù:
def custom_index(array, compare_function):
for i, v in enumerate(array):
if compare_function(v):
return i
Từ Dive Into Python :
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li.index("example")
5
Phương pháp chỉ mục của li st sẽ làm điều này cho bạn. Nếu bạn muốn đảm bảo đơn đặt hàng, hãy sắp xếp danh sách trước tiên bằng cách sử dụng sorted()
. Sắp xếp chấp nhận một CMP hoặc thông số quan trọng để ra lệnh như thế nào phân loại sẽ xảy ra:
a = [5, 4, 3]
print sorted(a).index(5)
Hoặc:
a = ['one', 'aardvark', 'a']
print sorted(a, key=len).index('a')
cách là một trong những điều này?
def global_index(lst, test):
return (pair[0] for pair in zip(range(len(lst)), lst) if test(pair[1]))
Cách sử dụng:
>>> global_index([1, 2, 3, 4, 5, 6], lambda x: x>3)
<generator object <genexpr> at ...>
>>> list(_)
[3, 4, 5]
Nhận pythonic: def global_index (lst, test): return (idx cho idx, val trong liệt kê (lst) nếu test (val)) – recursive
bộ lọc (lambda x: x> 3, [1,2,3,4,5,6]) –
Đây là một cách khác để sử dụng danh sách hiểu (một số người có thể tìm thấy nó gây tranh cãi). Nó rất dễ tiếp cận đối với các thử nghiệm đơn giản, ví dụ: so sánh về các thuộc tính đối tượng (mà tôi cần rất nhiều):
el = [x for x in mylist if x.attr == "foo"][0]
Tất nhiên điều này giả định sự tồn tại (và, thực sự, duy nhất) của một phần tử phù hợp trong danh sách.
'el = [x cho x trong danh sách của tôi nếu x.attr ==" foo "]' 'nếu el : làm điều gì đó với el [0] ' giải quyết vấn đề" tồn tại " – berkus
giả sử bạn muốn tìm một giá trị trong một mảng NumPy, Tôi đoán một cái gì đó như thế này có thể làm việc:
Numpy.where(arr=="value")[0]
Nếu bạn chỉ muốn tìm hiểu xem một phần tử được chứa trong danh sách hay không:
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> 'example' in li
True
>>> 'damn' in li
False
bạn trả lời là tốt nhất! =) – holms
Tôi tìm thấy điều này bằng cách điều chỉnh một số tutos.Nhờ google, và tất cả các bạn;)
def findall(L, test):
i=0
indices = []
while(True):
try:
# next value in list passing the test
nextvalue = filter(test, L[i:])[0]
# add index of this value in the index list,
# by searching the value in L[i:]
indices.append(L.index(nextvalue, i))
# iterate i, that is the next index from where to search
i=indices[-1]+1
#when there is no further "good value", filter returns [],
# hence there is an out of range exeption
except IndexError:
return indices
Một sử dụng rất đơn giản:
a = [0,0,2,1]
ind = findall(a, lambda x:x>0))
[2, 3]
T.B. Scuse tiếng anh của tôi
tôi sử dụng chức năng trả lại chỉ số cho các phần tử phù hợp (Python 2.6):
def index(l, f):
return next((i for i in xrange(len(l)) if f(l[i])), None)
Sau đó sử dụng nó thông qua chức năng lambda để lấy yếu tố cần thiết cho bất kỳ phương trình cần thiết ví dụ bằng cách sử dụng tên phần tử.
element = mylist[index(mylist, lambda item: item["name"] == "my name")]
Nếu tôi cần sử dụng nó ở một số nơi trong mã của tôi, tôi chỉ cần xác định hàm tìm kiếm cụ thể, ví dụ: cho việc tìm kiếm yếu tố theo tên:
def find_name(l, name):
return l[index(l, lambda item: item["name"] == name)]
Và sau đó nó là khá dễ dàng và có thể đọc được:
element = find_name(mylist,"my name")
- 1. Tìm một phần tử trong một mảng trong Java
- 2. Đếm các phần tử mảng trong Python
- 3. để tìm ba phần tử chính trong một mảng
- 4. C: tìm số phần tử trong một mảng []
- 5. Tìm phần tử nhỏ nhất trong một mảng có mẫu
- 6. Tìm đối tượng dựa trên phần tử mảng, chỉ trả về phần tử mảng phù hợp?
- 7. C - số phần tử trong một mảng?
- 8. mảng Một phần tử trong struct
- 9. Tìm phần tử không lặp lại trong mảng?
- 10. cách tìm phần tử phù hợp nhất trong mảng số?
- 11. Tìm phần tử tối đa phổ biến trong hai mảng?
- 12. Tìm các phần tử "không giống nhau" trong hai mảng
- 13. cách truy cập các phần tử trong một mảng 2D?
- 14. Thêm các phần tử của một mảng
- 15. Tìm vị trí của một phần tử trong một mảng đơn giản
- 16. Thuật toán Javascript để tìm các phần tử trong mảng không nằm trong mảng khác
- 17. Tìm các phần tử duy nhất trong một mảng chuỗi trong C
- 18. Thay thế một phần tử trong một mảng đối tượng
- 19. xóa MỘT phần tử mảng theo giá trị trong ruby
- 20. Đếm số phần tử trong mảng
- 21. Remove phần tử từ mảng
- 22. Phân ngẫu nhiên các phần tử trong một mảng?
- 23. Tìm dãy số có tổng lớn nhất của các phần tử trong một mảng
- 24. tìm phần tử tối thiểu trong một mảng được sắp xếp theo chu kỳ
- 25. Tìm hai phần tử lặp lại trong một mảng nhất định
- 26. Cách hiệu quả để tìm kiếm phần tử trong một mảng Javascript
- 27. Để tìm phần tử tối thiểu trong một mảng được sắp xếp và xoay
- 28. Tôi làm cách nào để tìm số phần tử trong một mảng?
- 29. C - phần tử nằm ngoài phần đầu của một mảng
- 30. Số phần tử trong mảng tĩnh và mảng động
Cảm ơn bạn, đây là chính xác những gì tôi đang tìm kiếm, và nó làm việc một cách hoàn hảo! –
Nhưng mã này đưa ra lỗi khi phần tử không có trong danh sách.Trong ngữ cảnh ví dụ hiện tại nếu tôi tìm kiếm 'ba' (nghĩa là: li.index ('ba')) cho lỗi. –
Bạn có thể phát hiện lỗi khi phát hiện thấy nội dung nào đó không có trong danh sách. 'try: li.index (" ba ") ngoại trừ ValueError: found = false' –