2009-10-23 33 views
6

Vì vậy, tôi có ba danh sách:Trong Python, tôi có thể in 3 danh sách theo thứ tự theo số chỉ mục không?

['this', 'is', 'the', 'first', 'list'] 
[1, 2, 3, 4, 5] 
[0.01, 0.2, 0.3, 0.04, 0.05] 

Có cách nào mà sẽ cho phép tôi để in các giá trị trong các danh sách theo thứ tự theo chỉ số?

ví dụ:

this, 1, 0.01 (all items at list[0]) 
is, 2, 0.2 (all items at list[1]) 
the, 3, 0.3 (all items at list[2]) 
first, 4, 0.04 (all items at list[3]) 
list, 5, 0.05 (all items at list[4]) 

Số lượng mục trong mỗi danh sách thay đổi mỗi khi tập lệnh được chạy, nhưng chúng luôn có cùng số giá trị cuối cùng. Vì vậy, một thời gian, kịch bản có thể tạo ra ba mảng với 30 mặt hàng, thời gian khác, nó có thể tạo ra chỉ có 15 giá trị trong mỗi vv

Trả lời

9

Những gì bạn có thể tìm kiếm được gọi là zip:

>>> x = ['this', 'is', 'the', 'first', 'list'] 
>>> y = [1, 2, 3, 4, 5] 
>>> z = [0.01, 0.2, 0.3, 0.04, 0.05] 
>>> zip(x,y,z) 
[('this', 1, 0.01), ('is', 2, 0.20000000000000001), ('the', 3, 0.29999999999999999), ('first', 4, 0.040000000000000001), ('list', 5, 0.050000000000000003)] 
>>> for (a,b,c) in zip(x,y,z): 
...  print a, b, c 
... 
this 1 0.01 
is 2 0.2 
the 3 0.3 
first 4 0.04 
list 5 0.05 
+1

Cũng được đề cập: itertools.izip, tạo ra một máy phát điện cho kết quả. –

+0

Cảm ơn! hoạt động như một sự quyến rũ! Định dạng độc đáo và mọi thứ. –

3

Sử dụng zip

for items in zip(L1, L2, L3): 
    print items 

items sẽ là một tuple với một giá trị từ mỗi danh sách, theo thứ tự.

0
lists = (['this', 'is', 'the', 'first', 'list'], 
      [1, 2, 3, 4, 5], 
      [0.01, 0.2, 0.3, 0.04, 0.05]) 
print zip(*lists) 

kéo khóa các danh sách với nhau và dừng lại khi danh sách ngắn hết các mặt hàng.

0

Đây là cách rõ ràng ngay lập tức hầu hết (để một newb python), và có thể là một cách tốt hơn, nhưng ở đây đi:

#Your list of lists. 
uberlist = (list1, list2, list3) 

#No sense in duplicating this definition multiple times. 
#Define it up front. 
uberRange = range(len(uberList)); 

#Since each will be the same length, you can use one range. 
for i in range(len(list1)): 
    # Iterate through the sub lists. 
    for j in uberRange: 
     #Output 
     print uberlist[ j ][ i ]; 
+0

Mặc dù giải pháp của bạn hoạt động, zip trở nên trầm hơn (và ngắn hơn). –

+0

Yea, tôi không ngạc nhiên khi có cách nào tốt hơn. Tôi đã chỉ nhìn vào Python trong một vài tuần (nếu có), vì vậy tôi chắc chắn rằng hầu hết các nỗ lực của tôi vẫn sẽ là "con đường dài xung quanh". – cwallenpoole

+0

Tôi cũng sẽ cược rằng zip nhanh hơn: câu trả lời của tôi được viết bằng Python, zip là phương thức dựng sẵn. – cwallenpoole

Các vấn đề liên quan