2016-05-26 1 views
2

私は、ループを使ってPython のリストの一部を逆にする助けが必要です。Pythonでループを使ってリストの一部をどうやって逆にすることができますか?

私がリストを持っている:mylist = ['a', 'b', 'c', 'd', 'e', 'f']

はまた、インデックス番号を持って、この番号はどこ逆転を開始するために教えてくれます。私は現在持っている何['d', 'c', 'b', 'a', 'e', 'f']

['c', 'b', 'a', 'f', 'e', 'd']

どのように私は私のコードを変更することができますを返す

def list_section_reverse(list1, reverse_index): 
    print("In function reverse()") 

    n_list = [] 

    for item in range(len(list1)): 
     n_list.append((list1[(reverse_index - 1) - item])) 
     item += 1 
    return n_list 

mylist = ['a', 'b', 'c', 'd', 'e', 'f'] 
print(list_section_reverse(mylist, 3)) 

を逆インデックス番号が3である場合、それはこのようなものである必要があります、その結果、['d', 'c', 'b', 'a', 'e', 'f']が出力されますか?

答えて

0

リストのコピーを作成できますか?

def list_section_reverse(list1, reverse_index): 
    print("In function reverse()") 

    n_list = [ element for element in list1 ] 

    for item in range(reverse_index + 1): 
     n_list[ item ] = list1[ reverse_index - item ] 
     item += 1 

    return n_list 

mylist = ['a', 'b', 'c', 'd', 'e', 'f'] 
print(list_section_reverse(mylist, 3)) 

アウト:

In function reverse() 
['d', 'c', 'b', 'a', 'e', 'f'] 
+0

これは動作し、すべてのサイズのリストで動作します。ありがとう、ありがとう。 – user2572329

+0

うれしかった!^_ ^ – Luis

2

あなたが簡単に使用できます。

def list_section_reverse(list1, reverse_index): 
    return list(reversed(list1[:reverse_index+1])) + list1[reverse_index+1:] 

編集:、既存のソリューションとの問題は、あなたがreverse_index後に逆転しておくことです。あなたは使用ループに持って場合は、これを試してください:あなたはこれを試すことができ

def list_section_reverse(list1, reverse_index): 
    print("In function reverse()") 

    n_list = list1[:] 

    for i in range(reverse_index + 1): 
     n_list[i] = list1[-i-reverse_index] 
    return n_list 

mylist = ['a', 'b', 'c', 'd', 'e', 'f'] 
print(list_section_reverse(mylist, 3)) 
+0

FGITW効果私はない組み込み関数で、ループを使ってこれを実現したい – Arc676

+0

それほど速いです。 – Selcuk

+0

...再び... Arc676 @ – user2572329

0

。これは、スライスを使用せず、whileループまたはforループのいずれかを使用できます。

def reversed_list(my_list, index): 
     result = [] 
     list_copy = my_list.copy() 

     i = 0 
     while i < index+1: 
      result.append(my_list[i]) 
      list_copy.remove(my_list[i]) 
      i+=1 

     result.reverse() 

     return result + list_copy 

またはループのための

def reversed_list(my_list, index): 
     result = [] 
     list_copy = my_list.copy() 

     for i in range(len(my_list)): 
      if i < index + 1: 
       result.append(my_list[i]) 
       list_copy.remove(my_list[i]) 

     result.reverse() 

     return result + list_copy 
+0

申し訳ありませんが、私は説明のループ部分を見ませんでした。私はそれを追加します – RoadRunner

+0

乾杯。また、可能であればスライス式を使わずにこれを達成できますか? – user2572329

+0

私は答えを更新しました。あなたはまだすべての種類のスライスを削除したいですか? – RoadRunner

2

とニシキヘビソリューション:あなたが尋ねたように今

list1[reverse_index::-1] + list1[reverse_index+1:] 

、それは、ループを使用していません。まあ、明示的ではありません...代わりに、上記をループの構成要素に分解することができます。

def list_section_reverse(list1, reverse_index): 
    if reverse_index < 0 or reversed_index >= len(list1): 
     raise ValueError("reverse index out of range") 
    reversed_part = [] 
    for i in range(reverse_index, -1, -1): # like for i in [n, n-1, ..., 1, 0] 
     reversed_part.append(list1[i] 

    normal_part = [] 
    for i in range(reverse_index + 1, len(list1)): 
     normal_part.append(list1[i]) 

    return reversed_part + normal_part 
0

あなたは、スライスを使用して、リストのインプレースを変更することができます。

mylist[:4] = mylist[:4][::-1] 
関連する問題