2013-05-28 33 views
20

Tôi có một bộ tương tự (669.256,02, 6.117.662,09, 669258,61, 6.117.664,39, 669258,05, 6.117.665,08) mà tôi cần để lặp qua, nhưiterating trên hai giá trị của một danh sách tại một thời điểm trong python

for x,y in (669256.02, 6117662.09, 669258.61, 6117664.39, 669258.05, 6117665.08) 
     print (x,y) 

mà sẽ in

669256.02 6117662.09 
    669258.61 6117664.39 
    669258.05 6117665.08 

im trên Python 3.3 btw

+0

Và cũng [Python "Mỗi phần tử khác" Thành ngữ ] (http://stackoverflow.com/q/2631189) –

+0

Bạn nói đúng, một điều tuyệt vời của nó. Thats embarasig ... Nhưng cảm ơn bạn! –

Trả lời

33

Bạn có thể sử dụng một iterator:

>>> lis = (669256.02, 6117662.09, 669258.61, 6117664.39, 669258.05, 6117665.08) 
>>> it = iter(lis) 
>>> for x in it: 
...  print (x, next(it)) 
...  
669256.02 6117662.09 
669258.61 6117664.39 
669258.05 6117665.08 
12
>>> nums = (669256.02, 6117662.09, 669258.61, 6117664.39, 669258.05, 6117665.08) 
>>> for x, y in zip(*[iter(nums)]*2): 
     print(x, y) 


669256.02 6117662.09 
669258.61 6117664.39 
669258.05 6117665.08 
+3

Whoa. Đó là hầu như không thể đọc được, xem xét nó một hack. -1 cho điều đó. 1 cho ngắn gọn, mặc dù. – Alfe

+1

@Alfe đọc tài liệu Python chính thức ** xin vui lòng **: http://docs.python.org/2/library/functions.html#zip ... đặc biệt là phần có nội dung * "Điều này làm cho thành ngữ có thể là một cụm từ một chuỗi dữ liệu thành các nhóm có độ dài bằng cách sử dụng 'zip (* [iter (s)] * n)'. "* – jamylak

+5

Sau khi đọc tài liệu như vậy, tôi đã nói cùng một điều về tài liệu. Bất cứ khi nào một hack được giả định là đủ khả thi, nó được gọi là thành ngữ. Nhưng điều đó không làm cho nó dễ đọc ;-) – Alfe

4

Các grouper dụ trong phần itertools công thức nấu ăn sẽ giúp bạn ở đây: http://docs.python.org/3.3/library/itertools.html#itertools-recipes

from itertools import zip_longest 
def grouper(iterable, n, fillvalue=None): 
    "Collect data into fixed-length chunks or blocks" 
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx" 
    args = [iter(iterable)] * n 
    return zip_longest(*args, fillvalue=fillvalue) 

Sau đó bạn sẽ sử dụng:

for x, y in grouper(my_set, 2, 0.0): ## Use 0.0 to pad with a float 
    print(x, y) 
Các vấn đề liên quan