假设你有元组元组(看起来像一个矩阵)。 现在我想更改其内容,因此我将其转换为列表。 假设我有矩阵的行数和列数。
如何将矩阵中的索引与列表中的索引进行匹配?
提前完成。
答案 0 :(得分:4)
使用列表,您只需再次使用[]
运算符即可。所以,例如:
>>> 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
答案 1 :(得分:3)
a = [[1,2], [3, 4]]
如果a
是矩阵,我们可以使用两个参数:行和列来访问各个元素。在这里,row
表示列表的数量,column
将引用列表中元素的位置。
因此,column
只是引用列表中元素的常规方式,而row
只不过是引用列表中列表的常规方式。 row
和column
都是基于零的索引。
格式为
a[row][column]
当我们说
时a[row]
这意味着,从列表列表中获取位置row
以及我们说
a[row][column]
我们说,从我们想要的列表中,选择位置column
的元素。
答案 2 :(得分:0)
假设你有一个元组元组:
>>> a = ((1,2,3),(4,5,6),(7,8,9))
你转换成一个平面列表,大概使用这样的技术(Joel Cornett,https://stackoverflow.com/a/10636583/219229):
>>> b = list(sum(a, ()))
>>> b
[1, 2, 3, 4, 5, 6, 7, 8, 9]
这样b
有效地丢失了原始的多维索引。如果您已经知道a
中的原始索引,则可以在b
中计算其索引,如下所示:
>>> matrix_width = len(a[0])
... (assuming you have the indices i,j) ...
>>> index_in_b = j*matrix_width + i
>>> item_to_find = b[index_in_b]
如果将其扩展为多维数组(如3d数组),并且索引为i
,j
,k
,那么它应为index = i + (j * width) + (k * width * span)
,其中width = a[0][0]
和span = a[0]
P / S:如果您想将其转换为列表列表,可以使用以下简写:
>>> b = list[map(list,a)] # using map
>>> b = [list(x) for x in a] # using list comprehension