Tôi đã mày mò trong Python trong tuần này và tôi đã bị mắc kẹt trong một cái gì đó. Nếu tôi có danh sách 2D như thế này:
If I had a 2D list like this:
myList = [[1,2],[3,4],[5,6]]
Và tôi đã làm điều này
>>>myList.index[[3,4]]
nó sẽ trở lại
1
Tuy nhiên, tôi muốn chỉ số của một cái gì đó ở bên một trong các danh sách, như thế này
>>>myList.index[3]
Và nó sẽ trở lại
1, 0
Có điều gì có thể làm điều này?
Chúc mừng
Tituszban
4.4092 Huy hiệu vàng18 Huy hiệu bạc28 Huy hiệu đồng2 gold badges18 silver badges28 bronze badges
Hỏi ngày 25 tháng 4 năm 2011 lúc 5:05Apr 25, 2011 at 5:05
Sam Jarmansam JarmanSam Jarman
7.26714 Huy hiệu vàng53 Huy hiệu bạc100 Huy hiệu Đồng14 gold badges53 silver badges100 bronze badges
2
Thử cái này:
def index_2d[myList, v]:
for i, x in enumerate[myList]:
if v in x:
return [i, x.index[v]]
Usage:
>>> index_2d[myList, 3]
[1, 0]
Đã trả lời ngày 25 tháng 4 năm 2011 lúc 5:14Apr 25, 2011 at 5:14
Mark Byersmark ByersMark Byers
787K188 Huy hiệu vàng1553 Huy hiệu bạc1440 Huy hiệu đồng188 gold badges1553 silver badges1440 bronze badges
Nếu bạn đang thực hiện nhiều tra cứu, bạn có thể tạo một ánh xạ.
>>> myList = [[1,2],[3,4],[5,6]]
>>> d = dict[ [j,[x, y]] for x, i in enumerate[myList] for y, j in enumerate[i] ]
>>> d
{1: [0, 0], 2: [0, 1], 3: [1, 0], 4: [1, 1], 5: [2, 0], 6: [2, 1]}
>>> d[3]
[1, 0]
Đã trả lời ngày 25 tháng 4 năm 2011 lúc 8:26Apr 25, 2011 at 8:26
Sử dụng GenExpr đơn giản:
def index2d[list2d, value]:
return next[[i, j] for i, lst in enumerate[list2d]
for j, x in enumerate[lst] if x == value]
Thí dụ
print index2d[[[1,2],[3,4],[5,6]], 3]
# -> [1, 0]
Đã trả lời ngày 25 tháng 4 năm 2011 lúc 6:52Apr 25, 2011 at 6:52
JFSJFSjfs
386K183 Huy hiệu vàng950 Huy hiệu bạc1626 Huy hiệu Đồng183 gold badges950 silver badges1626 bronze badges
Không có gì làm điều này rồi, trừ khi nó ở Numpy, điều mà tôi không biết nhiều. Điều này có nghĩa là bạn sẽ phải viết mã thực hiện nó. Và điều đó có nghĩa là những câu hỏi như "
>>>myList.index[[3,4]]
6 trở lại là gì?" quan trọng.Đã trả lời ngày 25 tháng 4 năm 2011 lúc 5:12Apr 25, 2011 at 5:12
OmnifarityomnifyingOmnifarious
53.3K18 Huy hiệu vàng129 Huy hiệu bạc191 Huy hiệu Đồng18 gold badges129 silver badges191 bronze badges
>>>myList.index[[3,4]]
0Điều này sẽ trả về nhiều hơn một phiên bản của danh sách phụ, nếu có.
Đã trả lời ngày 25 tháng 4 năm 2011 lúc 5:21Apr 25, 2011 at 5:21
Dawgdawgdawg
Phù bằng vàng 94K2323 gold badges122 silver badges200 bronze badges
Thử cái này! Điều này làm việc cho tôi :]
>>>myList.index[[3,4]]
1Đã trả lời ngày 28 tháng 1 năm 2017 lúc 18:25Jan 28, 2017 at 18:25
1
Dựa trên câu trả lời của KevPie, tôi đã quản lý để có được danh sách 2D chứa tọa độ của tất cả các sự cố
>>>myList.index[[3,4]]
2Bây giờ CoordSlist chứa tất cả các chỉ mục cho giá trị 1 trong Mylist:
>>>myList.index[[3,4]]
3Đã trả lời ngày 7 tháng 6 năm 2018 lúc 13:56Jun 7, 2018 at 13:56
Thận trọng: Câu trả lời đầu tiên trên đó: The first answer up there:
def index_2d[myList, v]:
for i, x in enumerate[myList]:
if v in x:
return [i, x.index[v]]
sẽ gây ra rất nhiều lỗi miễn là có bất kỳ phần tử nào/giống hệt nhau, cho bất kỳ V nào trong mỗi x. Bởi vì x.index [v] chỉ trả về chỉ mục đầu tiên [ngoài cùng bên trái] của bất kỳ phần tử nào có cùng giá trị của v, trong x, không phải là chỉ mục thực tế của v. Nghĩa là, điều này chỉ hoạt động nếu tất cả các phần tử trong mỗi hàng là duy nhất.errors as long as there are any equal/identical elements, for any v in each x. Because x.index[v] only returns the first [leftmost] index of any element that has the same value of v, in x, NOT the actual index of the current v. That is, this only works if all elements in each row are unique.
Thay vào đó, hãy thử điều này để tránh các giá trị không duy nhất:
>>>myList.index[[3,4]]
5Đã trả lời ngày 19 tháng 3 lúc 4:24Mar 19 at 4:24