循环遍历从变量索引开始的列表

时间:2018-06-19 10:10:14

标签: python

是否有一个可以替换try的单线程,除了在此代码中?

在列表中查找变量然后返回下一个索引,如果索引超出范围,则返回第一个索引。

def cycle_my_list(my_var):
    my_list = ['cleaner', 'list', 'cycle']
    try:
        return my_list[my_list.index(my_var) + 1]
    except IndexError:
        return my_list[0]

预期结果:

>>> cycle_my_list('list')
'cycle'
>>> cycle_my_list('cycle')
'cleaner'

2 个答案:

答案 0 :(得分:7)

使用模%运算符

my_list = ['cleaner', 'list', 'cycle']
return my_list[(my_list.index(my_var) + 1) % len(my_list)]

答案 1 :(得分:2)

这既适用于项目是否在列表中,也适用于单行内容!

return my_list[my_list.index(my_var) + 1] if my_var in my_list and my_list.index(my_var)+1<len(my_list) else my_list[0]

更新:这可能更具可读性,因为Sasha Tsukanov建议:

return my_list[(my_list.index(my_var) + 1) % 3] if my_var in my_list else my_list[0]