Pythonのリスト内のすべての項目を繰り返すためのコードを、0以外の索引から始めてください。 -- python フィールド と python-3.x フィールド と list フィールド と iterator フィールド 関連 問題

Improve code for iterating over every item in a list in python starting at an index other than 0 [duplicate]












2
vote

問題

日本語

このコードでは、インデックス[4]のindex [3]の終了後のリスト内の各項目を繰り返したいと思いました[3]。これを達成するためのコードを書いた面倒な方法を改善する方法はありますか?私は「4:3」を試してみましたが、これはインデックス4から6と0-3を繰り返していません。

<事前> <コード> mar = int(input()) days = ["0","1","2","3","4","5","6"] count = 0 x = "0" while count < mar: for a in days[4],[5],[6],[0],[1],[2],[3]: if count < mar: count += 1 x = a print(x)
英語

In this code I wanted to iterate over each item in the list starting at index [4] finishing at index [3]. Is there any way to improve the cumbersome manner in which I have written the code to achieve this? I tried "for a in days[4:3] but this only iterated indexes 4 to 6 and never 0-3;

mar = int(input()) days = ["0","1","2","3","4","5","6"] count = 0 x = "0" while count < mar:   for a in days[4],[5],[6],[0],[1],[2],[3]:     if count < mar:       count += 1       x = a    print(x) 
</div
           
   
   

回答リスト

0
 
vote
vote
ベストアンサー
 

これを試してみてください:

<事前> <コード> email5

編集:あなたは今下のあなたの目的を言ったので、あなたが必要とするのはこの。

 

try this:

input = '4'                        start_day = int(input)              days = ["0","1","2","3","4","5","6"] days_before = [] # Loop                 for day in days:      if int(day) > start_day:      # Either print         print day         else:         days_before.append(day)   # Or dump to second list else:                             # When finished     for day in days_before:       # Print second list         print day 

Edit: since you now told us your purpose below, I think all you need is this.

</div
 
 
1
 
vote

Itertools Islice + Cycle

itertools を使用してイテレータを作成できます。これは、 next を指定された範囲で呼び出す必要がある遅延ソリューションです。

<事前> <コード> from itertools import islice, cycle c = islice(cycle(days), 5, None) for _ in range(len(days)): print(next(c)) 5 6 0 1 2 3 4

推奨される

このツールキットのこのメンバーには、重要な補助が必要になる場合があります。 ストレージ(繰り返しの長さによって異なります)。

 

itertools islice + cycle

You can use itertools to create an iterator. This is a lazy solution which requires you to call next on the iterator over a specified range.

from itertools import islice, cycle  c = islice(cycle(days), 5, None)  for _ in range(len(days)):     print(next(c))  5 6 0 1 2 3 4 

Only recommended for small iterables:

Note, this member of the toolkit may require significant auxiliary storage (depending on the length of the iterable).

</div
 
 
     
     
0
 
vote

あなたのレビューと提案を満足しています。私はあなたの提案に似たものを考えていました。私は2つのリストを作成するので、私はPythonプログラミングから初心者として私が正しい方法を考えているのを見てうれしいです。私が試みていたものを提供するために私の元のコードに統合されたあなたの提案の下のあなたの提案を見てください。

<事前> <コード> #This programme is intended to find the number of day of week for N-th day (mar) of a year provided that in this year January 1 is based on user entry (start_day). Days of week are numbered as: 0 — Sunday, 1 — Monday, 2 — Tuesday, ..., 6 — Saturday. An integer K in the range 1 to 365 is given. start_day = int (input("Enter day number to start:- ")) mar = int(input("Enter nth day of the year to find:-")) count = 0 days = ["0","1","2","3","4","5","6"] days_before = [] while count < mar: # Loop for day in days: if int(day) > start_day: if count < mar: count += 1 # Either print print (day) else: days_before.append(day) # Or dump to second list else: # When finished for day in days_before: if count < mar: count += 1 # Print second list print (day)
 

Many thanks for your review and suggestion which works perfectly. I was thinking of something similar to your suggestion i.e creating two lists so I am glad to see that as a novice to python programming I am thinking the right way. Please see below your suggestion integrated into my original code to deliver what I was attempting;

 #This programme is intended to find the number of day of week for N-th day (mar) of a year provided that in this year January 1 is based on user entry (start_day). Days of week are numbered as: 0 — Sunday, 1 — Monday, 2 — Tuesday, ..., 6 — Saturday. An integer K in the range 1 to 365 is given.                         start_day = int (input("Enter day number to start:- "))  mar = int(input("Enter nth day of the year to find:-"))     count = 0       days = ["0","1","2","3","4","5","6"] days_before = [] while count < mar: # Loop                   for day in days:       if int(day) > start_day:        if count < mar:         count += 1     # Either print         print (day)         else:         days_before.append(day)   # Or dump to second list   else:                             # When finished     for day in days_before:        if count < mar:         count += 1       # Print second list         print (day)   
</div
 
 
       
       
0
 
vote
<事前> <コード> start = 4 for i in range(start, start+min(mar, len(days))): print(days[i % len(days)]) # mar = 4 --> 4, 5, 6, 0 # mar = 10 --> 4, 5, 6, 0, 1, 2, 3
 
start = 4 for i in range(start, start+min(mar, len(days))):     print(days[i % len(days)])  # mar = 4 --> 4, 5, 6, 0 # mar = 10 --> 4, 5, 6, 0, 1, 2, 3 
</div
 
 
   
   

関連する質問

3  Recursive Generatorオブジェクトをリストに変換します  ( Convert recursive generator object to list ) 
Pythonに単純な木構造を実装しようとしています。木は子供を持つ単一の「根」ノードで始まります、子供たちはそれぞれの子供たちなどを持っているかもしれません。 今、ツリーのすべてのノードの名前を印刷したいのですが、それをリストに変換したいです。私は再帰的な...

0  Python多次元連想配列で1つのキーを繰り返します  ( Iterating one key in a python multidimensional associative array ) 
2次元連想配列(辞書?)を動的に作成しています 私はそのキーをループしようとしています - インデックスの1つを一定に保ちながら、例えば「john」に関連するすべての値が最初のブラケットに関連しています。 <事前> <コード> myhash['john'][...

2  インクリメントされたイテレータSTD ::スワッピングのときに次へ  ( Incremented iterator stdnext when swapping ) 
コードを考慮してください: <事前> <コード> list<int> a{ 4,3,1,2 }; auto i = a.begin(); swap(*i, *(++i)); なぜスワップは何もしないのですか?以下は予想通りに機能しますか? <事前> <コー...

141  自分のイテレータを作成します  ( Creating my own iterators ) 
私はC ++を学ぼうとしているので、この質問が基本的な知識の欠如を示しているなら、あなたが見る、事実は、基本的な知識がないことを示しています。 私はいくつかの助けが必要なクラスが作成されたクラスのためのイテレータを作成する方法を説明したい。 私はポイントのコン...

6  イテレータのC ++ STL準拠のイテレータ  ( C stl compliant iterator of iterators ) 
私がしようとしていること 私は物事を分割する方法があります。このメソッドは配列を完全にソートしません。一方の側のすべての要素(ある程度決定された "中心"、または "中点値"のすべての要素が「中心」よりも小さいように配列を分割します。反対側のすべての要素は中...

9  vb.netでIENUMERABLE関数の歩留まり復帰を実装できますか? [複製]  ( Can i implement yield return for ienumerable functions in vb net ) 
この質問はすでにここで回答を持っています 閉じられた 8年前> 可能な重複: vb.net C#で、<コード> IEnumerble<> を返す関数を書き込むときは、 yield return を使用して列挙型と<コード...

4  派生クラスを持つカスタムコンテナ用のイテレータ  ( Iterator for custom container with derived classes ) 
私は2つの異なる方法で実装されているが単一のインタフェースで実装されているカスタムコンテナ。このようないくつかのこと。 <事前> <コード> class Vector { virtual Iterator begin() = 0...

7  イテレータを使用して部分ファイルストリームを文字列に読み込む  ( Reading a partial file stream into a string using iterators ) 
これは私がこれまでに試したものですが、成功しないで: <事前> <コード> std::string ReadPartial( std::ifstream& _file, int _size ) { std::istreambuf_iterator<ch...

0  Python Generator functions述語  ( Python generator function with predicate ) 
<事前> <コード> def group_func(iterable,p): for i in iterable: yield [i] if p(i): yield i GROUP_...

3  ConcurrentNavigableMap、弱い一貫したイテレータの解釈  ( Concurrentnavigablemap interpretation of weakly consistent iterators ) 
javadoc ConcurrentNavigableMap には、次のように少し混乱しています。 ビューのイテレータは、決して決してない「弱い一貫した」反復子です。 ConcurrentModificationExceptionを投げ、トラバースする...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有