2014-11-30 2 views
0

Я пытаюсь напечатать матрицу списка списков.Как распечатать матрицу из нескольких списков

Например, вход может быть:

l1 = [[2,3],[3,2]] 
l2 = [[1,2],[2,1],[2,2],[3,3]] 
l3 = [[1,1],[1,3],[3,1]] 

Выходные данные должны быть основаны на координатах. Более конкретно: я ищу списки, чтобы увидеть, какая из них содержит координату, а затем я печатаю имя списка, в котором я нашел координату.

Редактировать (благодаря @sweeneyrod): Каждая координата будет (только один раз) в списке.

Например: l1 содержит [2,3], поэтому напечатано это место в матрице «l1». Другой пример: l3 содержит [1,1], поэтому напечатано положение (1,1), l3.

Выход:

l3 l2 l3 
l2 l2 l1 
l3 l1 l2 

Я подумал, что было бы возможно итерация с использованием сверки и ColumnCount, но мне не удастся получить эту работу.

Любые советы? Спасибо заранее!

+1

Постарайтесь быть более четкое представление о вашей продукции. –

+0

У вас есть гарантия, что каждая координата будет в одном из списков? – rlms

+0

@sweeneyrod Да, каждая координата будет в одном из списков (только один раз). Также добавил это к моему вопросу. –

ответ

1
>>> l1 = [[2,3],[3,2]] 
>>> l2 = [[1,2],[2,1],[2,2],[3,3]] 
>>> l3 = [[1,1],[1,3],[3,1]] 
>>> b=[l1,l2,l3] 
>>> import numpy as np: 
>>> a=np.zeros((3,3),dtype=str) # numpy array of empty strings 
>>> a 
array([['', '', ''], 
     ['', '', ''], 
     ['', '', '']], 
     dtype='|S1') 
>>> for i,j in enumerate(b): 
... for k in j: 
...  a[k[0]-1][k[1]-1]='l'+str(i+1) 
... 
>>> for i in a: print i 
... 
['l3', 'l2', 'l3'] 
['l2', 'l2', 'l1'] 
['l3', 'l1', 'l2'] 

Initialize матрица без NumPy:

>>> a=[] 
>>> cols=3 
>>> rows=2 
>>> a = [[0]*rows for i in range(cols)] 
>>> a 
[[0, 0], [0, 0], [0, 0]] 
+0

Спасибо! Получил это так. Любая вероятность того, что вы также знаете, как сгенерировать матрицу, например a = [[0,0,0], [0,0,0], [0,0,0]], используя несколько столбцов/строк? –

+0

Вы можете использовать numpy. Я отправлю код в свой ответ. –

+0

Хмм странно. Я не могу использовать numpy в Python 3.4.2. У меня не всегда есть n * n матрица. Иногда я использую матрицу n * m. Вот почему я пытался сделать это: 'a1 = [] а = [] для г в диапазоне (0, столбцы): a1.append (0) для я в диапазоне (0, строки): а. append (a1) ' Результат выглядит так же, как и сам сделанный a = [[], [] и т. д.], но он не работает. Это действительно странно. –

0

Во-первых, вам необходимо поместить эти переменные в списке (или делать плохие и уродливые самоанализ):

lists = [l1, l2, l3] 

Тогда есть два вложенных for петли Итерация по координатам:

for y in range(max_y): 
    for x in range(max_x): 
     for index, value in enumerate(lists): 
      if [x, y] in value: 
       print("l{}".format(value), end=" ") 
       break 
    print() 

функция enumerate перебирает что-то и его показатели:

list(enumerate(["a", "b", "c"])) == [(1, "a"), (2, "b"), (3, "c")] 
Смежные вопросы