在Python中迭代列表時設置開始索引的最佳方式是什麼?例如,我列出了一週中的星期幾 - 星期日,星期一,星期二......星期六 - 但我想從星期一開始重複列表。這樣做的最佳做法是什麼?迭代Python列表的開始索引
回答
這正是我所期待的。謝謝! – 2011-05-27 15:50:15
對於大型列表來說這不是沒有效率嗎?我相信這種切片操作必須將被引用的列表元素複製到新列表中。 – UndeadKernel 2014-05-13 13:41:53
是的,這對於大型列表來說是低效的。請參閱下面的gnibblers回答以獲得不復制的解決方案。 – 2014-05-13 14:20:53
你總是可以使用索引循環計數器常規的C風格的循環:
for i in range(len(l)-1):
print l[i+1]
它始終是更好地遵循「循環每個元素的」風格,因爲這是做正常的事情,但如果它在你的方式,只要記住常規風格也支持,總是。
islice
有它並不需要複製該列表的一部分
from itertools import islice
for day in islice(days, 1, None):
...
如果你想要的是從Monday
打印起的優勢,你可以使用list
的index
方法找到位置其中「星期一」在列表中,並按照其他帖子中的解釋從那裏進行迭代。使用list.index
節省您的硬編碼索引的「星期一」,這是錯誤的潛在來源:
days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
for d in days[days.index('Monday'):] :
print d
如果你想「環繞」,有效地旋轉列表,開始與週一(而不僅僅是砍掉的項目之前星期一):
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)
這裏有一個旋轉發電機,其並不需要使輸入序列的扭曲的副本...可能是有用的,如果輸入序列比7項大得多。
>>> 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']
>>>
stdlib會勾住你的兒子!
#!/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'])
- 1. 從特定索引開始迭代所有Python列表值
- 2. Python IndexError:列表索引超出範圍 - 2d列表迭代
- 3. 在Python中迭代索引
- 4. ST4迭代列表與索引
- 5. 從python中的特定索引完整迭代列表
- 6. Python:迭代列表
- 7. python迭代列表
- 8. Python列表迭代
- 9. Python循環迭代獲取列表中元素的所有索引的列表
- 10. Python:如何迭代硒webelement列表並獲取索引?
- 11. 列表索引在Python中超出範圍;迭代
- 12. Python:兩個列表迭代內循環索引
- 13. HashSet的隨機開始索引迭代器
- 14. 開始索引添加到列表
- 15. 列表中的Python迭代
- 16. 迭代python列表:迭代順序
- 17. 基於迭代列表中的索引列表訪問項目
- 18. STL迭代::開始()
- 19. 如何從特定索引開始迭代數組?
- 20. 如何開始從集合索引迭代ArrayList?
- 21. 更改開始迭代的值在一序列的Python
- 22. Python:列表的迭代列表
- 23. Python的迭代通過列表,以在索引序列的新名單
- 24. 迭代索引的陣列夫特3
- 25. 如何在OGNL/Struts2中迭代和索引列表列表?
- 26. 如何Python列表迭代?
- 27. 迭代列表python程序
- 28. Python列表迭代麻煩
- 29. Python - 迭代嵌套列表
- 30. python迭代對象列表
你只是想循環,直到週六,或者你希望它環繞和打印星期天持續多久? – juanchopanza 2011-05-27 07:09:17
我只是想循環到週六。直到現在我才意識到,你可以在Python列表中使用切片。 – 2011-05-27 15:49:39
是否有解決方案,也處理生成器/迭代器,而不僅僅是列表?還是真的很大的名單? – 2017-08-09 17:03:24