3

教育用 Python ライブラリのリンク リストを作成しています。コードの重要なスニペットを次に示します。

class Element(object):
  def __init__(self, value, next):
    self.value = value
    self.next = next

class LinkedList(object):
  def __init__(self):
    self.head = None
    self.tail = None

  def insert_back(self, element):
    if self.empty():
      self.insert_front(element)
    else:
      self.tail.next = Element(element, None)
      self.tail = self.tail.next
      # I'd like to replace the above two lines with this
      # self.tail = self.tail.next = Element(element, None)

私の問題は最後の行から来ています。この質問に対する上位の回答によると、連鎖代入の Python 独自の実装が原因です。

他の言語では、最後の行はその上の 2 行と同じ効果がありますが、Python はElement(element, None)最初に式を評価し、次に結果を左から右に割り当てるため、 のself.tail前に割り当てられself.tail.nextます。これにより、前の末尾要素が新しい末尾要素を参照せず、新しい末尾要素がそれ自体を参照することになります。

私の質問は、これら 2 つの割り当てを 1 つのステートメントで実行する方法はありますか?

私は、より明示的な 2 行の割り当てを使用することに完全に満足しています。これは単なる好奇心のためです。

4

1 に答える 1