2015-05-29 32 views
5

A = [[1, 2, 3], [2, 3, 4], [4, 5, 6]]In một dòng danh sách lồng nhau bởi dòng - Python

tôi đang cố gắng hết sức mình để in A dạng:

1 2 3 
2 3 4 
4 5 6 

Đó là trong dòng khác nhau, nhưng tôi không thể làm như vậy mà không tất cả các yếu tố trong các dòng khác nhau. Đây là mã của tôi cho đến nay:

for r in A: 
    for t in r: 
     print(t,) 
    print 

Đây là đầu ra của tôi:

1 
2 
3 
2 
3 
4 
4 
5 
6 

Có vẻ như thực sự đơn giản, và tôi nghĩ rằng một thay đổi nhỏ sẽ làm điều đó. Cảm ơn!

Trả lời

5

Sử dụng vòng lặp đơn giản và " ".join() ánh xạ mỗi int trong danh sách lồng nhau vào str với map().

Ví dụ:

>>> ys = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]] 
>>> for xs in ys: 
...  print(" ".join(map(str, xs))) 
... 
1 2 3 
4 5 6 
7 8 9 10 

Sự khác biệt ở đây là chúng tôi có thể hỗ trợ độ dài tùy ý danh sách bên trong.


Lý do ví dụ của bạn không hoạt động như mong đợi là vì vòng lặp bên trong của bạn đang lặp qua từng thành phần của danh sách phụ;

for r in A: # r = [1, 2, 3] 
    for t in r: # t = 1 (on first iteration) 
     print(t,) 
    print 

print() bởi bản in mặc định nhân vật mới dòng ở cuối trừ khi bạn sử dụng: print(end="") Tôi tin rằng nếu bạn đang sử dụng Python 2.x print t, sẽ làm việc. Ví dụ:

>>> ys = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]] 
>>> for xs in ys: 
...  for x in xs: 
...    print x, 
...  print 
... 
1 2 3 
4 5 6 
7 8 9 10 

Nhưng print(x,) sẽ không hoạt động như bạn dự định; Python 2.x hoặc 3.x

2
for r in A: 
    print '%d %d %d' % tuple(r) 
1

print không có dấu phẩy sau sẽ in một ký tự dòng mới.

for r in A: 
    for t in r: 
     print t, 
    print 
0

Nếu bạn đang ở trong Python 3.x:

print(*('{} {} {}'.format(*r) for r in A), sep='\n') 

hay:

print(*('%d %d %d' % tuple(r) for r in A), sep='\n') 

Nếu không, bạn có thể nhập chức năng in Python 3.x từ các module __future__.

2

Phương pháp 1:

Chúng ta có thể sử dụng danh sách hiểu và .join() điều hành.

>>> my_list = [[1, 2, 3], [2, 3, 4], [4, 5, 6]] 

>>> for item in my_list: 
     print ' '.join(str(x) for x in item) 

1 2 3 
2 3 4 
4 5 6 

Phương pháp 2:

>>> my_list = [[1, 2, 3], [2, 3, 4], [4, 5, 6]] 

>>> for item in my_list: 
     for x in item: 
      print x, 
     print 

1 2 3 
2 3 4 
4 5 6 

Nội print với một dấu phẩy đảm bảo rằng các yếu tố bên trong danh sách của được in trong một dòng đơn. Outer print đảm bảo rằng đối với danh sách bên cạnh, nó in ở dòng tiếp theo.

1

Câu hỏi tương tự đã được trả lời bởi Jim Fasarakis Hilliard trong Print list of lists in separate lines.

Trong Python 3.x chúng ta có thể sử dụng:

A = [[1, 2, 3], [2, 3, 4], [4, 5, 6]] 

for i in A: 
     print(*i) 

Và đầu ra tương ứng là:

1 2 3 
2 3 4 
4 5 6 
Các vấn đề liên quan