Pythonでリストが更新されても、Forループは範囲を更新しません

ビルトスト

Pythonでオブジェクト指向プログラミングを使用する小さなプロジェクトの一部として。コンピューティングクラスター用の簡単なセットアップ/シミュレーションプログラムを作成してみました。クラスターはラックのセットで構成され、各ラックはそれぞれ12ノードで構成されます。なぜこれが起こるのか、そしてそれをどのように解決するのかを理解するのに苦労していますが、私はプログラムをほぼ終了しました。

プログラム全体は、ノード、ラック、クラスターの3つのクラスにまたがっています。

ここで私がやろうとしているのは、ラックがいっぱいかどうかをチェックするメソッドを作成することです(いっぱいになると、12個のノードが含まれます)。そうであれば、新しいラックインスタンスを作成してから、最新のラックインスタンスをノードで埋めます。

これはクラスターに関連するコードです

class Cluster:
    def __init__(self, nodesPerRack, racks=[]):
        self.nodesPerRack = nodesPerRack
        self.racks = racks

    def addNode(self, node):
        if len(self.racks) == 0:
            newRack = Rack()
            self.racks.append(newRack)
            print(len(self.racks))

        for i in range(len(self.racks)):
            if self.racks[i].getNodes() < self.nodesPerRack:
                print("IM ADDING TO A RACK")

                self.racks[i].settInn(node)

            elif self.racks[i].getNodes() >= self.nodesPerRack:
                print("New rack is being made")
                newRack = Rack()

                newRack.insertInto(node)

                self.racks.append(newRack)

プログラムを実行しても何も起こらないようで、Rackのインスタンスが無数に生成されるか、ラックにスペースがあるかどうかを繰り返しチェックしていると思われます(したがって、RAMを大量に消費しますか?)

私はいくつかの方法を試しましたが、新しいRack要素が追加されても、反復している範囲が更新されておらず、ハングしていると思われ始めています。これにより、次のステートメントが更新されます。

for i in range(len(self.racks)):

forループでその範囲を更新するにはどうすればよいですか?whileループを使用して次の方法を使用してみました

i = 0
while i < self.nodesPerRack:
    do something
i += 1

それでも、forループの場合と同じ問題が発生します。

さらに、ここに関連する部分があります Rack

class Rack: 
    def __init__(self, nodes=[]):
        self.nodes = nodes

    def addTo(self, node):
        self.nodes.append(node)

およびノー​​ドのクラス

class Node:
    def __init__(self, minne, antPros):
        self.minne = minne
        self.antpros = antPros

これが私がテストを開始するために使用したコードです

from node import Node
from rack import Rack
from cluster import Cluster

cluster = Cluster(12)

for i in range(0,650):
    newNode = Node(64,1)
    cluster.addNode(newNode)

for i in range(0,16):
    newNode = Node(1024, 2)
    cluster.addNode(newNode)
Martijn Pieters

range(len(self.racks))その式を実行するときに、長さを1回取ります。forループは、その表現各反復を再評価しません。

リスト自体をループするだけで、問題全体を回避できます。

for rack in self.racks:

rack代わりに使用しますself.racks[i]リストオブジェクト用に作成されたイテレータはリストに接続されたままであり、次の値を要求するたびに長さを再チェックします。これは、forループ内で拡張されているリストのループが、余分な要素も繰り返すことを意味します。

>>> l = [42, 81]
>>> for i in l:
...     print(i)
...     if i == 42:
...         l.append(117)
...
42
81
117

その他の場合は、while毎回長さに対してカウンターをテストするループを使用できます

i = 0
while i < len(self.racks):
    # ...
    i += 1

while ない表現に各反復を再評価します:

>>> l = [42, 81]
>>> i = 0
>>> while i < len(l):
...     print(l[i])
...     if l[i] == 42:
...         l.append(117)
...     i += 1
...
42
81
117

while今、あなたはあなたのへのインデックス、手動でカウンタを維持するために持っているようにループは、この作業のために、より厄介であるself.racksリストたびに、それは忘れたり欠場するのは簡単ですi += 1終わり。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

選択したテキストをクリックした後、ウィンドウを選択しても更新された範囲が表示されません

分類Dev

スクリプト内で.bashrcをソーシングしても、環境変数は更新されません

分類Dev

Chromeでは、スタイルシートを追加してもstyleSheetsが更新されません

分類Dev

範囲ベースのforループを続行しても、ブレークポイントは再トリガーされませんか?

分類Dev

オプションのリストが変更されても、selectのフォームコントロールは値を更新しません

分類Dev

Rの光沢のあるggvisツールチップは、プロットが更新されても、新しいデータで情報を更新しません

分類Dev

Pythonの更新リストエラー!リストはwhileループ内では更新されません

分類Dev

更新後のMySqlトリガーは、すべてが正しい場合でも更新されません

分類Dev

Ubuntu20.04でPHP7.4を更新しても、最新リリースには更新されません

分類Dev

フォームが投稿されてもLaravelルートリソースは更新されません

分類Dev

React-リスナーでグローバルスコープにアクセスしても、グローバルスコープは更新されません

分類Dev

GPSがインストールされているにもかかわらず、エミュレータのCordovaアプリケーションが「GooglePlayサービスを更新しないとHelloMapは実行されません」とスローします

分類Dev

apply()を使用してもAngularスコープは更新されません

分類Dev

phpsqlで更新してもデータベースは更新されません

分類Dev

こんにちは、私はphpを使用してPythonスクリプトを実行していますが、他のページも埋め込んでいるため、ボタンがクリックされたときにページを更新したくありません

分類Dev

マングースが複数のドキュメントを更新しても何も更新されません

分類Dev

クエリ/インポート範囲の式は、ページが更新されるまで機能しません

分類Dev

セルの範囲をドラッグしてもフォーマットは維持されません

分類Dev

アプリはfirebaseリアルタイムデータベース内のデータを更新しますがrecyclerviewには何も表示されません。

分類Dev

更新されたSQLクエリは、クロス結合があってもデータを返しません

分類Dev

forループを介してリストからデータ行を更新しています。インデックスが範囲外でした

分類Dev

角度のあるループでブロードキャストしても、レシーバーで更新された値が得られません

分類Dev

ユーザーのプロフィール写真を更新しても、currentUser.photoUrlで更新されません

分類Dev

ListViewでTextBoxのテキストを変更しても、ObservableCollection <string>ソースは更新されません

分類Dev

角度/イオンng-クリックしてもビューは更新されませんが、モデルでは更新されます

分類Dev

FormikフォームでinitialValuesプロップを更新しても、入力値は更新されません

分類Dev

Vimでテキストファイルを編集してもtail-fは更新されません

分類Dev

Pythonグローバルリストが更新されていません

分類Dev

Visual Studioでリソースの名前を変更しても、参照は更新されません

Related 関連記事

  1. 1

    選択したテキストをクリックした後、ウィンドウを選択しても更新された範囲が表示されません

  2. 2

    スクリプト内で.bashrcをソーシングしても、環境変数は更新されません

  3. 3

    Chromeでは、スタイルシートを追加してもstyleSheetsが更新されません

  4. 4

    範囲ベースのforループを続行しても、ブレークポイントは再トリガーされませんか?

  5. 5

    オプションのリストが変更されても、selectのフォームコントロールは値を更新しません

  6. 6

    Rの光沢のあるggvisツールチップは、プロットが更新されても、新しいデータで情報を更新しません

  7. 7

    Pythonの更新リストエラー!リストはwhileループ内では更新されません

  8. 8

    更新後のMySqlトリガーは、すべてが正しい場合でも更新されません

  9. 9

    Ubuntu20.04でPHP7.4を更新しても、最新リリースには更新されません

  10. 10

    フォームが投稿されてもLaravelルートリソースは更新されません

  11. 11

    React-リスナーでグローバルスコープにアクセスしても、グローバルスコープは更新されません

  12. 12

    GPSがインストールされているにもかかわらず、エミュレータのCordovaアプリケーションが「GooglePlayサービスを更新しないとHelloMapは実行されません」とスローします

  13. 13

    apply()を使用してもAngularスコープは更新されません

  14. 14

    phpsqlで更新してもデータベースは更新されません

  15. 15

    こんにちは、私はphpを使用してPythonスクリプトを実行していますが、他のページも埋め込んでいるため、ボタンがクリックされたときにページを更新したくありません

  16. 16

    マングースが複数のドキュメントを更新しても何も更新されません

  17. 17

    クエリ/インポート範囲の式は、ページが更新されるまで機能しません

  18. 18

    セルの範囲をドラッグしてもフォーマットは維持されません

  19. 19

    アプリはfirebaseリアルタイムデータベース内のデータを更新しますがrecyclerviewには何も表示されません。

  20. 20

    更新されたSQLクエリは、クロス結合があってもデータを返しません

  21. 21

    forループを介してリストからデータ行を更新しています。インデックスが範囲外でした

  22. 22

    角度のあるループでブロードキャストしても、レシーバーで更新された値が得られません

  23. 23

    ユーザーのプロフィール写真を更新しても、currentUser.photoUrlで更新されません

  24. 24

    ListViewでTextBoxのテキストを変更しても、ObservableCollection <string>ソースは更新されません

  25. 25

    角度/イオンng-クリックしてもビューは更新されませんが、モデルでは更新されます

  26. 26

    FormikフォームでinitialValuesプロップを更新しても、入力値は更新されません

  27. 27

    Vimでテキストファイルを編集してもtail-fは更新されません

  28. 28

    Pythonグローバルリストが更新されていません

  29. 29

    Visual Studioでリソースの名前を変更しても、参照は更新されません

ホットタグ

アーカイブ