2013-05-28 13 views
20

Mam zestaw jak (669256.02, 6117662.09, 669258.61, 6117664,39, 669258,05, 6.117.665,08), które muszę iteracyjne nad, jakiteracji nad dwoma wartościami listy naraz w Pythonie

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

które wydrukować

669256.02 6117662.09 
    669258.61 6117664.39 
    669258.05 6117665.08 

im na Pythonie 3.3 btw

+0

a także [Python "Każdy inny element" idiom ] (http://stackoverflow.com/q/2631189) –

+0

Masz rację, to dubler. To embarasig ... Ale dziękuję! –

Odpowiedz

33

można użyć 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. To ledwo czytelne, uważam to za hak. -1 za to. +1 za zwięzłość. – Alfe

+1

@Alfe przeczytaj oficjalną dokumentację w języku Python ** please **: http://docs.python.org/2/library/functions.html#zip ... szczególnie część, która mówi * "Umożliwia to identyfikację grupowania seria danych na grupy n-length za pomocą 'zip (* [iter (s)] * n)'. "* – jamylak

+5

Po przeczytaniu takiej dokumentacji powiedziałbym to samo o dokumentacji. Za każdym razem, gdy zakłada się, że haker jest wystarczająco wykonalny, nazywa się go idiomem. Ale to nie czyni go czytelnym ;-) – Alfe

4

Przykład w sekcji itertools receptur grouper powinno pomóc tutaj: 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) 

byłoby wtedy użyć:

for x, y in grouper(my_set, 2, 0.0): ## Use 0.0 to pad with a float 
    print(x, y) 
Powiązane problemy