2017-03-06 7 views
0

Pythonはリストのスライス機能を提供しますが、この 質問に対して、あなたは リストのスライスを(生成することが可能な独自の機能を実装します。注:あなたはあなたの 溶液中のスライス演算子を使用することはできません)。関数がsliceと呼ばれ、この特定の順序で、次の 3つの入力を取るべきである:スライスから作成されますリスト・スライシング

  1. リスト、source、。このリストは、あなたの関数では変更できません。
  2. 作成するスライスの開始インデックスを表す正の整数、start。この値が[0, len(list)-1]の範囲にない場合、関数は空のリストを返す必要があります。
  3. 作成するスライスの終了インデックスを表す正の整数、end。この値が[start, len(list)-1]の範囲にない場合、関数は空のリストを返す必要があります。

パラメータ値が許容されている場合は、あなたの関数が がインデックスstartから始まり、インデックスend(包括的)で を終了sourceからアイテムを含むリストを返します。これは、インデックスendの項目も新しい リストに含まれているため、Pythonスライス 演算子とは異なります。

これは私がこれまでに得たものである:

list1 = [] 
def slice(list1): 
    list1 = list(input("enter a list")) 
    emptylist = [] 
    st = int(input("enter start")) 

    ed = int(input("enter end")) 


    if ed not in range(st,len(list1)-1) or st not in range(0,len(list1)-1): 
     print(emptylist) 
    else: 
     list2 = [] 

     for i in list1: 
      list2.append(list1[i]) 
      return(list2) 

print(slice(list1)) 
+4

あなたの宿題には、ユーザーからの入力については何も言われていません。あるいは、少なくとも、私はかなりあなたのfuncitonが引数*としてこれらを取るべきであると確信しています。 –

+0

@ juanpa.arrivillagaリストはユーザーから取られなければならず、機能によって操作または変更することはできません。 1-スライスが作成されるソースのリスト。このリストは、あなたの関数では変更できません。 – sal

+0

あなたのソリューションは私には大丈夫です。あなたはそれを実行しようとしましたか? juanpaが言ったことを追加するには、関数はパラメータを要求すべきではありません。これは、次のようにする必要があります: 'def slice(List、start、end):'このように宣言する必要があります。 –

答えて

0

私は、リスト入力が区切られることになっているのか分からないので、私は私の答えに含めるつもりはありません。実際には、私はちょうど私たちが何らかの形でユーザーから適切なフォーマットのリストを受け取り、そのリストでその関数を呼び出す必要があると仮定しようとしています。これらはスライスタスクのための最低限の要件であるため、

あなたの機能は3つのパラメータ、startend、およびlist自体を取るだろう。

def slice(lst, start, end): 

最も簡単な解決策は、ループを反復し、start:end範囲内のすべての要素を追加することであろう。結局のところ、あなたはインデックス表記法を使うことが許されています。

まず、適切な要素のみを含む空のリストを作成する必要があります。このリストはoutputリストと呼ばれます。リスト指数が整数であるため、

output = [] 

その後、我々はstartend間のすべての整数を反復処理することができます。関数の最後に

for i in range(start, end): 
    output.append(lst[i]) 

、あなたが実際にスライスされたリストオブジェクトで終わるようoutputリストを返すようにしたいと思います。

return output 

はすべて一緒にそれを置く:あなたの元のスクリプトが動作しないのはなぜ

# some shebangs here 
''' 
Some docstring here 
''' 
# some imports here 

# receive user input. You need a list and two integers. 
# lst = input() 
# start = input() 
# end = input() 

def slice(lst, start, end): 
    output = [] 
    if not(0 <= start < len(lst)): 
     return output 
    elif not(start <= end < len(lst)): 
     return output 
    else: 
     for i in range(start, end+1): 
      output.append(lst[i]) 
     return output 

print(slice(lst, start, end)) 


を?

コードの問題が最後の行にあります。あなたが行う場合は、次のすべての

for i in list1: 
    list2.append(list1[i]) 
    return(list2) 

まず、iが反復されている要素、要素のないインデックスです。次に、関数を終了し、ループを終了します。結果として、スクリプトはあなたにIndexErrorを投げるだけでなく、あなたが運が良ければ、1つの要素だけのリストも返します。あなたはこのようにそれを変更することができます。

for i in list1: 
    list2.append(i) 
return list2 

これは、それが今、私たちはstartendパラメータを無視している以外、働くだろう。 (これが私がrange()機能を選択した理由です)。 Pythonの表記法を使用する場合は、リストを列挙し、索引をチェックし、必要に応じて追加します。

for index, element in enumerate(list1): 
    if start <= index <= end: 
     list2.append(element) 
return list2 
+0

、ありがとう – sal

関連する問題