如何按两两循环遍历列表?
我想循环遍历一个 Python 列表并一次处理 2 个列表项。用另一种语言来说是这样的:
for(int i = 0; i < list.length(); i+=2)
{
// do something with list[i] and list[i + 1]
}
完成此任务的最佳方法是什么?
I want to loop through a Python list and process 2 list items at a time. Something like this in another language:
for(int i = 0; i < list.length(); i+=2)
{
// do something with list[i] and list[i + 1]
}
What's the best way to accomplish this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您可以使用步长为 2 的
范围
:Python 2
Python 3
注意:使用
Python 2 中的 xrange
而不是range
,因为它更有效,因为它生成可迭代对象,而不是整个列表。You can use a
range
with a step size of 2:Python 2
Python 3
Note: Use
xrange
in Python 2 instead ofrange
because it is more efficient as it generates an iterable object, and not the whole list.您还可以使用此语法 (
L[start:stop:step]
):其中第一个数字是起始索引(默认为列表开头或 0),第二个数字是结束切片索引(默认为列表末尾),第三位数字是偏移量或步长。
You can also use this syntax (
L[start:stop:step]
):Where the first digit is the starting index (defaults to beginning of list or 0), 2nd is ending slice index (defaults to end of list), and the third digit is the offset or step.
我认为最简单的就是:
没有额外的进口或任何东西。在我看来,非常优雅。
The simplest in my opinion is just this:
No extra imports or anything. And very elegant, in my opinion.
如果您使用的是 Python 2.6 或更高版本,您可以使用来自
itertools
模块:调用如下this:
请注意,在 Python 3.x 中,您应该使用
zip_longest
而不是izip_longest
。If you're using Python 2.6 or newer you can use the grouper recipe from the
itertools
module:Call like this:
Note that in Python 3.x you should use
zip_longest
instead ofizip_longest
.有点脏,但它有效。
Kinda dirty but it works.
这可能不如 izip_longest 解决方案那么快(我实际上没有测试它),但它可以与 python < 一起使用。 2.6(izip_longest是在2.6中添加的):
如果您需要早于2.3,您可以用内置地图替换imap。缺点是不提供自定义填充值的能力。
This might not be as fast as the izip_longest solution (I didn't actually test it), but it will work with python < 2.6 (izip_longest was added in 2.6):
If you need to go earlier than 2.3, you can substitute the built-in map for imap. The disadvantage is that it provides no ability to customize the fill value.
如果您可以控制列表的结构,那么最Pythonic的事情可能是将其从: 更改
为:
然后,您的循环将是:
If you have control over the structure of the list, the most pythonic thing to do would probably be to change it from:
to:
Then, your loop would be: