2011-09-05 28 views
6

Tôi đang viết mã để phân tích cú pháp bản đồ tilemap từ tệp cấu hình. Bản đồ có định dạng:Làm cách nào để chuyển đổi gọn gàng danh sách lồng nhau?

1|2|3|4 
1|2|3|4 
2|3|4|5 

nơi các số đại diện cho ô. sau đó tôi thực hiện điều này vào một mảng số nguyên:

[[int(tile) for tile in row.split("|")] for row in "1|2|3|4\n1|2|3|4\n2|3|4|5".lstrip("\n").split("\n")] 

Điều này tạo ra một mảng trong các định dạng [row] [cột], nhưng tôi muốn nó được [cột] [hàng] như trong [x] [ y] vì vậy tôi sẽ không phải giải quyết nó ngược (tức là [y] [x]). Nhưng tôi không thể nghĩ ra bất kỳ cách nào ngắn gọn để tấn công vấn đề. Tôi đã xem xét việc làm lại định dạng bằng cách sử dụng cú pháp xml thông qua Tiled, nhưng nó xuất hiện quá khó khăn cho người mới bắt đầu.

Cảm ơn trước vì bất kỳ phản hồi nào.

+0

thể trùng lặp của [Matrix Transpose bằng Python] (http://stackoverflow.com/questions/4937491/matrix-transpose-in-python) – ChillarAnand

Trả lời

26

sử dụng mylist = zip(*mylist):

>>> original = [[1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4, 5]] 
>>> transposed = zip(*original) 
>>> transposed 
    [(1, 1, 2), (2, 2, 3), (3, 3, 4), (4, 4, 5)] 

>>> original[2][3] 
    5 

>>> transposed[3][2] 
    5 

Cách hoạt động: zip(*original) bằng zip(original[0], original[1], original[2]). mà lần lượt là bằng: zip ([1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4, 5]).

+0

Đó là một cách đáng ngạc nhiên hiệu quả để làm việc đó! Cảm ơn! – zzz

0
def listTranspose(x): 
    """ Interpret list of lists as a matrix and transpose """ 
    tups = zip(*x) 
    return [ list(t) for t in tups ] 
Các vấn đề liên quan