在Python中,如何获取列表列表的索引?

时间:2015-07-12 05:02:25

标签: python python-2.7

输入:

列表清单:x [x2 [x1]]

输入x [x2 [x1]]的一维表示
matrix = [['.', '+', '.', '.', '-'], 
          ['.', '+', '.', '-', '-'], 
          ['.', '+', '.', '.', '-'], 
          ['.', '+', '.', '.', '-']]

输入x [x2 [x1]]的二维表示(注意:这不是必需的输出)

x1-> 0 1 2 3 4   
  0  . + . . -
  1  . + . - - 
  2  . + . . -
  3  . + . . -
 x2^

预期输出:

  • '+'和'-'s
  • 实例的“Raster”排序
  • 输出格式: (X1,X2,符号)

    examples = [(1,0,+), (4,0,-), (1,1,+), (3,1,-), (4,1,-), (1,2,+), (4,1,-), (1,3,+)]
    

我的工作:

技术1:

examples = []
    for a in matrix:
        for b in a:
            if(matrix[a][b] == '+' || matrix[a][b] == '-' ):
                examples.append()

技术2:(使用enumerate()

list(enumerate(matrix[num]) for num in matrix) 

第二种技术虽然提供了以下错误 -

TypeError: list indices must be integers, not list

3 个答案:

答案 0 :(得分:3)

In [7]: [ (i,j,character) for i, character in enumerate(row) for j, row in enumerate(matrix)  if character == '+' or character == '-']
Out[7]:
[(1, 0, '+'),
 (1, 1, '+'),
 (1, 2, '+'),
 (1, 3, '+'),
 (4, 0, '-'),
 (4, 1, '-'),
 (4, 2, '-'),
 (4, 3, '-')]

答案 1 :(得分:2)

我不确定这是不是你想要的,但这是我的代码:

matrix = [['.', '+', '.', '.', '-'], ['.', '+', '.', '-', '-'], ['.', '+', '.', '.', '-'], ['.', '+', '.', '.', '-']]

lst = []
for lineIdx, line in enumerate(matrix) :
    for colIdx, col in enumerate(line) :
        if matrix[lineIdx][colIdx] in ['+', '-'] :
            lst.append((lineIdx, colIdx, matrix[lineIdx][colIdx]))
print lst

并输出:

[(0, 1, '+'), (0, 4, '-'), (1, 1, '+'), (1, 3, '-'), (1, 4, '-'), 
(2, 1, '+'), (2, 4, '-'), (3, 1, '+'), (3, 4, '-')]

在我的列表中,我保存了第一行索引,然后是列索引。

答案 2 :(得分:1)

在第二种技术中,num不是整数,它是x的某个元素。

你可以在一行中这样做:

>>>inp = [['.', '+', '.', '.', '-'], ['.', '+', '.', '-', '-'], ['.', '+', '.', '.', '-'], ['.', '+', '.', '.', '-']]
>>>[ (y[0], x[0], y[1]) for x in (enumerate(inp)) for y in enumerate(x[1]) if y[1] !='.']

[(1, 0, '+'), (4, 0, '-'), (1, 1, '+'), (3, 1, '-'), (4, 1, '-'), (1, 2, '+'), (4, 2, '-'), (1, 3, '+'), (4, 3, '-')]