2013-01-22 16 views
7

Używam Python2.7 i chciałbym pętli przez listę x razy.Python: pętla przez element listy x razy?

a=['string1','string2','string3','string4','string5'] 
for item in a: 
    print item 

Powyższy kod wyświetli wszystkie pięć pozycji na liście. Co się stanie, jeśli chcę wydrukować tylko 3 pierwsze elementy? Szukałem w Internecie, ale nie mogłem znaleźć odpowiedzi, wydaje się, że xrange() wystarczy, ale nie wiem, jak to zrobić.

Dzięki za pomoc!

Odpowiedz

18

Sequence Slicing jest tym, czego szukasz. W takim przypadku musisz podzielić sekwencję na pierwsze trzy elementy, aby je wydrukować.

a=['string1','string2','string3','string4','string5'] 
for item in a[:3]: 
     print item 

Nawet, nie trzeba do pętli nad sekwencji, po prostu join go z nową linią i wydrukować go

print '\n'.join(a[:3]) 
+0

Dzięki, działa i przecinanie sekwencji może być również używane do wycinania listy krotek, takich jak a = [('string1', 'string2'), ('string3', 'string4'), ('string5', 'string6')] – michelle26

+0

@ michelle26: 'przecinanie sekwencji może być również używane do wycinania listy krotek też ...', czy było to zadanie jon lub oświadczenie? – Abhijit

+0

musisz spłaszczyć tę listę, jeśli chcesz dołączyć do niej – wim

0
a=['string1','string2','string3','string4','string5'] 
for i in xrange(3): 
    print a[i] 
+0

-1 również iterowanie zakresu w celu indeksowania iterowalnego – wim

7

myślę, że to byłoby uznane pythonic:

for item in a[:3]: 
    print item 

Edytuj: ponieważ kwestia sekund sprawiła, że ​​ta odpowiedź stała się zbędna, spróbuje podać pewne podstawowe informacje:

Krojenie tablic pozwala na szybki wybór w sekwencjach takich jak Listy ciągów. Podciąg od jednowymiarowej sekwencji mogą być określone przez indeksów lewych i prawych punktów końcowych:

>>> [1,2,3,4,5][:3] # every item with an index position < 3 
[1, 2, 3] 
>>> [1,2,3,4,5][3:] # every item with an index position >= 3 
[4, 5] 
>>> [1,2,3,4,5][2:3] # every item with an index position within the interval [2,3) 
[3] 

Zauważ, że lewy endpoint is included, prawo nie jest. Można dodać trzeci argument, aby wybrać tylko co n th element sekwencji:

>>> [1,2,3,4,5][::2] # select every second item from list 
[1, 3, 5] 
>>> [1,2,3,4,5][::-1] # select every single item in reverse order 
[5,4,3,2,1] 
>>> [1,2,3,4,5][1:4:2] # every second item from subsequence [1,4) = [2,3,4] 
[2, 4] 

Poprzez przekształcenie list do numpy tablic, jest to nawet możliwe, aby wykonać cięcie wielowymiarową:

>>> numpy.array([[1,2,3,4,5], [1,2,3,4,5]])[:, ::2] 
array([[1, 3, 5], 
     [1, 3, 5]])