

leetcodeでソートされている連結リストをマージする問題です。  
list1 とlist2 が与えられている連結リストです。  
初歩的な質問で申し訳ないのですが、while list1 and list2:のところはどのような意味なのでしょうか。  
list1とlist2がブール値ということですか？

[code]

    class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        cur = dummy = ListNode()
        while list1 and list2:               
            if list1.val < list2.val:
                cur.next = list1
                list1, cur = list1.next, list1
            else:
                cur.next = list2
                list2, cur = list2.next, list2
                
        if list1 or list2:
            cur.next = list1 if list1 else list2
            
        return dummy.next
    
[/code]


CC BY-SA 4.0
2023-02-12T13:07:48.483
93811
2023-02-13T01:28:36.580
2023-02-13T01:26:26.850
3060
56593
question
python
Python の while list1 and list2 が理解できない


下記にあるように  
オブジェクトにより `False` と判定されるものがあります

質問の場合, `ListNode()` の定義によるけど linked listが続いてなければ Falseと判断するようになっているものと思われます

docs.python.org [組み込み型](https://docs.python.org/ja/3/library/stdtypes.html) より

> **真理値判定**  
>  どのようなオブジェクトでも真理値として判定でき、`if` や `while` の条件あるいは以下のブール演算の被演算子として使えます。  
>  オブジェクトは、デフォルトでは真と判定されます。ただしそのクラスが `__bool__()` メソッドを定義していて、それが `False`
> を返す場合、または `__len__()` メソッドを定義していて、それが `0`
> を返す場合は偽と判定されます。主な組み込みオブジェクトで偽と判定されるものを次に示します:
>
>   * 偽であると定義されている定数: `None` と `False`
>   * 数値型におけるゼロ: `0`, `0.0`, `0j`, `Decimal(0)`, `Fraction(0, 1)`
>   * 空のシーケンスまたはコレクション: `''`, `()`, `[]`, `{}`, `set()`, `range(0)`
>

> **ブール演算 ---`and`, `or`, `not`**  
>  以下にブール演算を、優先順位が低い順に示します:
>
> 演算 | 結果 | 注釈  
> ---|---|---  
> `x or y` | x が偽なら y, そうでなければ x |  
> `x and y` | x が偽なら x, そうでなければ y |  
> `not x` | x が偽なら True, そうでなければ False |


CC BY-SA 4.0
2023-02-12T14:21:30.517
93814
2023-02-13T01:28:36.580
2023-02-13T01:28:36.580
3060
43025
93811
answer
  
  
> list1とlist2がブール値ということですか？

bool 型に cast して(`__bool__()`メソッド, もしくは `__len__()` メソッドの実行結果から)判定しています。

[code]

    >>> bool([]) # empty list
    False
    >>> bool([1])
    True
    >>> bool([[]]) # list of empty list
    True
    >>> bool([None]) # list of None
    True
    
[/code]

つまり、要素がある場合は `True`, ない場合は `False` になります。


CC BY-SA 4.0
2023-02-12T15:44:54.040
93815
2023-02-12T15:44:54.040
47127
93811
answer