2013-05-28 6 views
20

Ho una serie simile (669.256,02, 6.117.662,09, 669.258,61, 6.117.664,39, 669.258,05, 6.117.665,08), che ho bisogno di iterare, comel'iterazione di due valori di una lista in un momento in python

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

che avrebbe stampare

669256.02 6117662.09 
    669258.61 6117664.39 
    669258.05 6117665.08 

im su Python 3.3 btw

+0

E anche [Python "ogni altro elemento" Idioma ] (http://stackoverflow.com/q/2631189) –

+0

Hai ragione, è un doppio. Quello è embarasig ... Ma grazie! –

risposta

33

È possibile utilizzare un iteratore:

>>> 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. Questo è appena leggibile, consideralo un hack. -1 per quello. +1 per brevità, però. – Alfe

+1

@Alfe legge la documentazione ufficiale di Python ** per favore **: http://docs.python.org/2/library/functions.html#zip ... specialmente la parte che dice * "Questo rende possibile un idioma per il clustering una serie di dati in gruppi di lunghezza n usando 'zip (* [iter (s)] * n)'. "* – jamylak

+5

Dopo aver letto tale documentazione avrei dichiarato la stessa cosa sulla documentazione. Ogni volta che si ipotizza che un hack sia fattibile, viene chiamato un idioma. Ma questo non lo rende leggibile ;-) – Alfe

4

L'grouper esempio nella sezione itertools ricette dovrebbe aiutare voi qui: 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) 

Si potrebbe quindi utilizzare:

for x, y in grouper(my_set, 2, 0.0): ## Use 0.0 to pad with a float 
    print(x, y) 
Problemi correlati