2016-05-27 11 views
-1

リストの前と次の項目を取得する実践的な方法を教えてもらえますか?例:リストの前と次の項目python

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()の行に沿って考えていましたが、インデックスを設定できるかどうかわからないようです。

+5

を使用することができますか? –

+0

丸い容器があるかのようにしたいですか? – polku

+2

モジュラス演算子について聞いたことがありますか? –

答えて

5

簡単な解決策は

my_list[ (my_list.index(400) + 1) % len(my_list) ] 
を法として使用することです

結果:

>> 100 
0

私は、あなたが次の要素 "after" 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] 
5

あなたは、リストの国境の周りの「ループ」に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 
0

あなたが実際に行うために何をしようとしているオペレータ%

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] 
関連する問題