我有一个包含100多个元素的可迭代列表。我希望在每个第10个可迭代元素之后做一些事情。我不想使用计数器变量。我正在寻找一些不包含计数器变量的解决方案。
目前我喜欢这个:
count = 0
for i in range(0,len(mylist)):
if count == 10:
count = 0
#do something
print i
count += 1
我有什么办法可以省略反变量吗?
答案 0 :(得分:30)
for count, element in enumerate(mylist, 1): # Start counting from 1
if count % 10 == 0:
# do something
使用enumerate。它是为此而构建的
答案 1 :(得分:7)
只是为了显示另一个选项...希望我能正确理解你的问题...切片会给你准确的列表元素,而不必遍历每个元素或保留任何枚举或计数器。请参阅Explain Python's slice notation。
如果你想从第一个元素开始并从那一点获取每个第10个元素:
# 1st element, 11th element, 21st element, etc. (index 0, index 10, index 20, etc.)
for e in myList[::10]:
<do something>
如果您想从第10个元素开始并从该点获取每个第10个元素:
# 10th element, 20th element, 30th element, etc. (index 9, index 19, index 29, etc.)
for e in myList[9::10]:
<do something>
第二个选项(Python 2)的示例:
myList = range(1, 101) # list(range(1, 101)) for Python 3 if you need a list
for e in myList[9::10]:
print e # print(e) for Python 3
打印:
10
20
30
...etc...
100
答案 2 :(得分:2)
for i in range(0,len(mylist)):
if (i+1)%10==0:
do something
print i
答案 3 :(得分:2)
解决问题的另一种方法是在开始处理之前将iterable拆分为块。
grouper
recipe正是这样做的:
from itertools import izip_longest # needed for grouper
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
您可以这样使用它:
>>> i = [1,2,3,4,5,6,7,8]
>>> by_twos = list(grouper(i, 2))
>>> by_twos
[(1, 2), (3, 4), (5, 6), (7, 8)]
现在,只需循环遍历by_twos
列表。
答案 4 :(得分:0)
您可以使用范围循环以下列方式以10的倍数遍历mylist的长度:
for i in range(0,len(mylist), 10):
#do something