2013-01-17 11 views
6

Próbuję uzyskać listę nazw plików w kolejności. Coś jakPodwójna pętla w pytonie

files-1-loop-21 
files-1-loop-22 
files-1-loop-23 
files-1-loop-24 
files-2-loop-21 
files-2-loop-22 
files-2-loop-23 
. 
. 
. 
and so on 

Jak dla testów napisałem kod Pythona, jak poniżej:

kod sample_1:

for md in range(1,5): 
    for pico in range(21,25): 
     print md, pico 

Daje mi parę liczby takich jak:

`1 21 
    1 22 
    1 23 
    1 24 
    2 21 
    2 22 
    2 23 
    2 24 
    3 21 
    3 22 
    3 23 
    3 24 
    4 21 
    4 22 
    4 23 
    4 24 

`

jeśli używam:

kodu sample_2:

for md in range(1,5): 
    for pico in range(21,25): 
    print "file-md-loop-pico" 

uzyskać

files-md-loop-pico 
    files-md-loop-pico 
    files-md-loop-pico 
    files-md-loop-pico 
    files-md-loop-pico 
    files-md-loop-pico 
    files-md-loop-pico 

Jak (kod sample_2) powinny zostać zmienione, aby uzyskać listę plików, jak chciałem (jak pokazano na początku tego posta) w pythonie?

Z góry dziękuję.

Pozdrowienia

Odpowiedz

14

Spróbuj tego:

for md in range(1,5): 
    for pico in range(21,25): 
     print "file-{0}-loop-{1}".format(md, pico) 

czyli

from itertools import product 
for md, pico in product(range(1,5), range(21,25)): 
    print "file-{0}-loop-{1}".format(md, pico) 
2

Użyj formatowania ciągów.

print 'file-{0}-loop-{1}'.format(md, pico) 
+0

Powiedzmy mam trzy pętle, puszka Używam jako (print "files- {0} -loop- {1} -varies- {2}" .format (md, pico, jay))? Czy to możliwe wyjaśnić znaczenie {0} i {1}? – Vijay

+1

@Vijay na pewno możesz, liczby są odwołaniami do których należy dodać parametr "format", który chcesz zawrzeć w nawiasach. – Volatility

2

1) zakres Python jest określana przez indentation. Twój kod wewnętrzny musi być odpowiednio wcięte:

for md in range(1,5): 
    for pico in range(21,25): 
     print "file-md-loop-pico" 

2) Używasz ciąg dosłowne "file-md-loop-pico" zamiast wstawiania zmiennych md i pico.Aby format your string correctly użyj:

for md in range(1,5): 
    for pico in range(21,25): 
     print "file-{0}-loop-{1}".format(md, pico) 
+1

Biorąc pod uwagę wynik, mało prawdopodobne jest wcięcie; najprawdopodobniej OP właśnie sformatował wpis SO niepoprawnie, a nie faktyczny kod. – geoffspear

1

Rozwiązanie, o ile w innych odpowiedzi, z argumentami otoczonych {} jest poprawna nowoczesny sposób to zrobić

print'file-{0}-loop-{1}'.format{md,poco) 

Jest starszym sposobem, aby to zrobić że prawdopodobnie będzie zobaczyć, a może więcej sensu, jeśli są zaznajomieni z C lub C++ sprintf

print'file-%d-loop-%d'%(md,poco) 

dokumentacja: http://docs.python.org/2/tutorial/inputoutput.html

+0

Ten kod nie działa ('plik-% d-loop-% d'% (md, poco)) – Vijay

+0

Nadal musisz wydrukować wynik, że właśnie jak sformatować ciąg znaków –

+0

Dodałem wydruk, rodzice nie są potrzebni –

2

jedno-liner:

print '\n'.join([('files-%d-loop_%d' %(i, j)) for i in xrange(1,5) for j in xrange(21,25)]) 
0

to rozwiąże ten problem w prosty sposób:

Kod:

for md in range(1,5): 
     for pico in range(21,25): 

      print "file-%d-loop-%d"%(md,pico) 

wyjściowa:

file-1-loop-21 
file-1-loop-22 
file-1-loop-23 
file-1-loop-24 
file-2-loop-21 
file-2-loop-22 
file-2-loop-23 
file-2-loop-24 
file-3-loop-21 
file-3-loop-22 
file-3-loop-23 
file-3-loop-24 
file-4-loop-21 
file-4-loop-22 
file-4-loop-23 
file-4-loop-24