在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