2016-04-29 2 views
0

Я хотел бы знать, возможно ли иметь «вложенные массивы», то есть массив, содержащий массивы, которые имеют разные формы.Преобразование вложенных списков в массивы в python

У меня есть список списков координат, так что-то вроде:

coord = [ [ [x1,y1],[x2,y2] ], [ [x3,y3],[x4,y4],[x5,y5] ], [ [x6,y6] ] ]

Я хотел бы, чтобы преобразовать все эти списки в массивы, так что я могу сделать математические операции с ней. Результатом будет массив (3,), содержащий 3 массива (по одному в каждой позиции) соответствующих форм (2,2) (соответствующие вложенному списку [ [x1,y1],[x2,y2] ]), (3,2) и (1,2).

Конечная цель - сделать что-то вроде result = coord + [x7,y7], чтобы воспользоваться свойствами матричных операций в Python (мне сказали, что это намного эффективнее, чем выполнение циклов, и у меня много координат).

Результат будет выглядеть так:

result = [ [ [x1+x7,y1+y7],[x2+x7,y2+y7] ], [ [x3+x7,y3+y7],[x4+x7,y4+y7],[x5+x7,y5+y7] ] ]

+1

Если вы хотите, чтобы преобразовать все эти списки в массивы, что же результат выглядит? – Quinn

+0

Предложите вам прочитать [_Как я могу задать хороший вопрос? _] (Http://stackoverflow.com/help/how-to-ask) – martineau

+0

Можете ли вы объяснить, почему вопрос мал? Я новичок в Python, поэтому, на мой взгляд, это кажется ясным, но, возможно, это не имеет смысла. @ccf результатом будет массив (3,), содержащий 3 массива соответствующих фигур (2,2), (3,2) и (1,2) – JoVe

ответ

0

Если у вас есть координаты, то вы, вероятно, хотите использовать свой собственный класс для их хранения. Ниже не будет работать, как задумано, предполагая коорд является [x1, x2] то

result = coord + [x7,y7] 

даст:

result = [x1, x2, x7, y7] 

То, что вы должны рассмотреть возможность сделать это, чтобы написать свой собственный класс координат, например, и переопределить операторы (т.е. __add__), например:

class Coordinate(object): 
    def __init__(self, x, y): 
     self.x, self.y = x, y 

    def __add__(self, other): 
     return Coordinate(self.x + other.x, self.y + other.y) 

    # ... 

Также см A guide to pythons magic methods

+0

Проблема заключается в том, что я должен хранить координаты во вложенных списках (более сложная проблема сложнее, но объяснить ее бесполезно). Я редактировал вопрос, я надеюсь, что это яснее – JoVe

0

Вы можете использовать map сделать преобразование:

coord = map (lambda c: [ [xy[0] + x7, xy[1] + y7] for xy in c], coord) 

Пример кода:

# some example coordinates 
x1,y1 = 1,1 
x2,y2 = 2,2 
x3,y3 = 3,3 
x4,y4 = 4,4 
x5,y5 = 5,5 
x6,y6 = 6,6 
x7,y7 = 7,7 
coord = [ [ [x1,y1],[x2,y2] ], [ [x3,y3],[x4,y4],[x5,y5] ], [ [x6,y6] ] ] 
# the result is: 
coord = map (lambda c: [ [xy[0] + x7, xy[1] + y7] for xy in c], coord) 
print (coord) 

[Output] 

[[[8, 8], [9, 9]], [[10, 10], [11, 11], [12, 12]], [[13, 13]]]