Со списком вы можете просто использовать оператор []
еще раз. Так, например:
>>> a = [[1,2], [3, 4]]
>>> a[0][0]
1
>>> a[0][1]
2
>>> a[1][0]
3
>>> a[1][1]
4
>>> type(a)
<type 'list'>
>>> type(a[0])
<type 'list'>
>>> type(a[0][0])
<type 'int'>
Объяснение простое, в первый раз, вы используете оператор []
, вы получите list
, так что вы можете использовать оператор []
снова. Подобно этому, вы можете эмулировать матрицу.
Если вы хотите, чтобы найти индексы, то вы можете использовать эту изящную маленькую функцию:
def finder(value_to_find, matrix):
for r, row in enumerate(matrix):
for c, col in enumerate(row):
if col == value_to_find:
return r, c
И для демонстрации:
>>> a = [[1,2], [3, 4]]
>>> a[0][0]
1
>>> a[0][1]
2
>>> a[1][0]
3
>>> a[1][1]
4
>>> def finder(value_to_find, matrix):
for r, row in enumerate(matrix):
for c, col in enumerate(row):
if col == value_to_find:
return r, c
>>> finder(4, a)
(1, 1)
А вот объяснение с комментариями:
def finder(value_to_find, matrix):
"""
Function to find the indexes of a given value, on first notice
@param value_to_find: The value we need to find
@param matrix: The matrix we are to work with
@return: A tuple of row, column
"""
# Looping over the rows (lists within the main matrix)
for r, row in enumerate(matrix): # Using enumerate returns the index, r and the value row (which is a list)
for c, col in enumerate(row): # Looping over the values in each row, with index c and value col
if col == value_to_find: # If the col is equal to the value we want, then we return the row, column tuple
return r, c
Если у вас есть одномерная матрица, вы можете посмотреть это решение от Hyperborius:
listindex = row * length_of_row + column
Вы говорите, что вы сплющили матрицу, то есть сделали это одномерным списком? В противном случае индексы одинаковы. (Также добавьте небольшой пример кортежа кортежей.) – syockit
точно. Я превратил его в одномерное. – adamco