繁体   English   中英

迭代for循环python时如何检查以前的索引

[英]How can I check a previous index when iterating through a for loop python

我有一个有点随机的列表。

list  = [1,2,4,2,25,3,2,4,2,1,1,32,3,3,2,2,23,4,2,2,2,34,234,33,2,4,3,2,3,4,2,1,3,4,3]

我想遍历它并执行以下操作:

for item in list:
    while item >=5:
        if item = item_5_indexes_ago
            print "its the same as it was 5 entries ago!"

显然, item_5_indexes_ago 不是有效的 python。 我应该在这里替换什么? 我想检查 list[5]==list[1], if list[6]==list[2], ..... 对于列表中的每个项目。

您还可以使用列表理解和enumerate函数来获取元素:

[l for i, l in enumerate(list[:-5]) if l == list[i+5]]

pythonic解决方案是使用内置enumerate来跟踪索引以及项目

for index, item in enumerate(my_list):
    if index >= 5:
        item_5_indexes_ago = my_list[index-5]

您可以改为循环遍历索引:

for i in range(len(some_list)):
    # do something with
    # list[i]

并访问前一个元素,您可以使用:

if i >= 4 and list[i] == list[i - 4]:
    print "its the same as it was 4 entries ago!"

笔记:

  • 由于您想检查list[5]==list[1]并且if list[6]==list[2]似乎您想检查元素4之前的索引,而不是 5。
  • 不要使用list作为变量的名称,因为它会隐藏其内置实现。

执行此操作的最简单方法:

for index, item in enumerate(list):
    if index>=5:
        if item == list[index-5]:
            print "It's the same as it was 5 entries ago!"

在这种情况下,更方便的循环是按索引循环,如下所示:

for i in range(len(list)):
    if i >= 5 and list[i] == list[i-5]:
        print "it's the same as it was 5 entries ago!"

zip并行迭代list[5:]list[:-5]

for item, item_5_indices_ago in zip(list[5:], list[:-5]):
    do_whatever_with(item, item_5_indices_ago)

由于zip在最短输入序列时停止,因此您可以将list[:-5]替换为list 另外,不要调用你的 list list ,或者当你尝试调用内置的list时,你会得到一个奇怪的TypeError

只需以 6 人为一组逐步浏览列表:

from itertools import izip_longest

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)

for fives in grouper(biglist, 6):
    if fives[:-1].count(fives[-1]) > 1:
       print("its the same!")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM