Apa cara terbaik untuk mengatur indeks awal saat mengulang daftar dengan Python. Misalnya, saya memiliki daftar hari dalam seminggu - Minggu, Senin, Selasa, ... Sabtu - tetapi saya ingin mengulang daftar mulai hari Senin. Apa praktik terbaik untuk melakukan ini?
90
Jawaban:
Anda bisa menggunakan mengiris :
for item in some_list[2:]: # do stuff
Ini akan dimulai dari elemen ketiga dan berulang sampai akhir.
sumber
islice
, seperti yang disarankan dalam jawaban John La Rooy.islice
memiliki keuntungan karena tidak perlu menyalin bagian dari daftarfrom itertools import islice for day in islice(days, 1, None): ...
sumber
Anda selalu dapat melakukan perulangan menggunakan penghitung indeks perulangan gaya C konvensional:
for i in range(len(l)-1): print l[i+1]
Itu selalu lebih baik untuk mengikuti gaya "loop pada setiap elemen" karena itu adalah hal yang normal untuk dilakukan, tetapi jika menghalangi jalan Anda, ingat saja gaya konvensional juga didukung, selalu.
sumber
stdlib akan menghubungkanmu nak!
deque.rotate()
:#!/usr/local/bin/python2.7 from collections import deque a = deque('Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ')) a.rotate(3) deque(['Friday', 'Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday'])
sumber
Jika semua yang Anda inginkan adalah untuk mencetak dari
Monday
seterusnya, Anda dapat menggunakanlist
'sindex
metode untuk menemukan posisi di mana 'Senin' adalah dalam daftar, dan iterate dari sana seperti yang dijelaskan dalam posting lain. Penggunaan akanlist.index
menghemat pengodean indeks untuk "Monday", yang merupakan sumber kesalahan potensial:days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] for d in days[days.index('Monday'):] : print d
sumber
Berikut generator rotasi yang tidak perlu membuat salinan melengkung dari urutan masukan ... mungkin berguna jika urutan masukan jauh lebih besar dari 7 item.
>>> def rotated_sequence(seq, start_index): ... n = len(seq) ... for i in xrange(n): ... yield seq[(i + start_index) % n] ... >>> s = 'su m tu w th f sa'.split() >>> list(rotated_sequence(s, s.index('m'))) ['m', 'tu', 'w', 'th', 'f', 'sa', 'su'] >>>
sumber
Mengapa orang menggunakan pemotongan daftar (lambat karena menyalin ke daftar baru), mengimpor fungsi pustaka, atau mencoba memutar array untuk ini?
Gunakan for-loop normal dengan
range(start, stop, step)
(di manastart
danstep
merupakan argumen opsional).Misalnya, melakukan perulangan melalui array yang dimulai dari indeks 1:
for i in range(1, len(arr)): print(arr[i])
sumber
Jika Anda ingin "menyelesaikan" dan memutar daftar secara efektif untuk memulai dengan hari Senin (bukan hanya memotong item sebelum hari Senin):
dayNames = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', ] startDayName = 'Monday' startIndex = dayNames.index( startDayName ) print ( startIndex ) rotatedDayNames = dayNames[ startIndex: ] + dayNames [ :startIndex ] for x in rotatedDayNames: print ( x )
sumber