【问题标题】:Previous and next item of list python列表python的上一项和下一项
【发布时间】:2016-09-25 19:59:12
【问题描述】:

谁能指出我获取列表上一个和下一个项目的实用方法。例如:

my_list = [100, 200, 300, 400]

是否有获取上一个和下一个项目(300 和 100)的实用方法。

我正在使用my_list[my_list.index(400) - 1] 成功获取上一项。 Python 显然不介意得到一个负索引。但是,如果我尝试my_list[my_list.index(400) + 1],它不喜欢索引大于列表中的项目数。这是有道理的。

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range

我想我可以使用循环来循环并得到它——我只是希望有一个更简单的解决方案。我正在考虑使用iter(),但我似乎无法弄清楚是否可以设置索引。

【问题讨论】:

  • 你到底想做什么?
  • 你想让你有一个圆形容器吗?
  • 听说过取模运算符吗?
  • 或许见this answer
  • @Lost 我认为 OP 很清楚这一点。

标签: python list


【解决方案1】:

您可以使用运算符%

def get_loop_item(my_list, item, spacing):
    if isinstance(spacing, int):
        return my_list[(my_list.index(item) + spacing) % len(my_list)]
    elif isinstance(spacing, list):
        return [get_loop_item(my_list, item, space) for space in spacing] 
    return None

测试

>>> get_loop_item(my_list, 300, 1)
400
>>> get_loop_item(my_list, 300, -1)
200
>>> get_loop_item(my_list, 300, [-1, 1])
[200, 400]

【讨论】:

    【解决方案2】:

    一个简单的解决方案是使用模

    my_list[ (my_list.index(400) + 1) % len(my_list) ]
    

    结果:

    >> 100
    

    【讨论】:

      【解决方案3】:

      您可以使用 modolu 运算符围绕列表的边界“循环”:

      >>> my_list = [100, 200, 300, 400]
      >>> val = 400
      >>> my_list[(my_list.index(val) + 1) % len(my_list)] # next
      100
      >>> my_list[(my_list.index(val) - 1) % len(my_list)] # previous
      300
      

      【讨论】:

        【解决方案4】:

        我想,当您在“400 之后”寻找下一个元素时;你想拿到第一个吗?在这种情况下;只需检查列表的大小:

        current_index = my_list.index(400)
        next_index = current_index + 1
        if (next_index == len(my_list)):
            next_index = 0
        
        next_value = my_list[next_index]
        

        【讨论】:

          猜你喜欢
          • 2017-09-19
          • 1970-01-01
          • 1970-01-01
          • 2022-06-24
          • 1970-01-01
          • 1970-01-01
          • 2016-09-12
          • 2022-06-28
          • 1970-01-01
          相关资源
          最近更新 更多