2017-01-30 2 views
-2

lenを使わずにリストに要素が1つしか含まれていないかどうかを知りたい。リストにlenを使用せずに1つの要素しか含まれていないかどうかを知る方法

これらの2つの解決策の間でそれを行うには非常にpythonicな方法はありますか?あるいは、これらのどれもがpythonicです、そしてもしそうなら、それは何ですか?

解決策a:位置1のアイテムを削除し、IndexErrorを除いて、アイテムが1つしかないことがわかりました。

try: 
    a_list.pop(1): 
except IndexError: 
    #blah 

溶液B:使用する各リストの最初の要素を削除し、リストは現在

if not a_list[1:]: 
    # blah 
+3

'len(a_list)!= 1:' – tdelaney

+1

'if len(a_list)== 1 ' –

+2

最初のメソッドは、不必要に畳み込まれているだけでなく、テスト中にリストを変更します。 –

答えて

0

空であるかどうかをチェックするスライスの長さを有しています。 Pythonの哲学の

if len(my_list) < 2: 
    print("too short") 
+0

まあ、私は、再帰を練習するためにlenの再帰的なバージョンを実装しようとしていることを忘れています。したがって、lenを使いたくありません。私の悪い、そして答えに感謝します。 – vildric

+0

@vildricあなたはあなたの質問に 'len'を使いたくない理由についてその情報を書いておくべきです。その情報を今すぐ追加するのは遅すぎることはありません。おそらくダウン投票者に票を逆転させることはありませんが、将来的にはより多くの票を得ることができなくなる可能性があります。 FWIWでは、標準コレクション型のいずれかで 'len'を呼び出すと、現在の長さがすべて属性として格納されるため、非常に効率的です。 –

3

一つは許しを求めることは許可(Python glossary)を求めるよりも簡単である、です。

この意味で、リストに少なくとも1つの要素があるかどうかを確認する最もPythonの方法は、インデックス0の要素を試してアクセスすることです。

try: 
    some_list[0] 
except IndexError: 
    print("some_list is empty"). 

あなたがテストで欲しいものではありませんpopリストを変異させることに注意してください。あなたは、リストが正確一つの要素を持っているかどうかを確認したい場合は

は今、tryexceptの連続は仕事をすることができ、それが読めなくなってしまいます。

最良の方法は、おそらく直接lenチェックです:

if len(some_list) == 1: 
    print("some_list has exactly one element") 

あなたはlenを使いたくなかったとコメントしました。 (.pop()を使用することによって)あなたが代わりにリストを変異させたくない

try: 
    l[0] 
except IndexError: 
    print("length = 0") 
else: 
    try: 
     l[1] 
    except IndexError: 
     print("length = 1") 
    else: 
     print("length > 1") 
+0

私はlenを使用したくないと言及するのを忘れてしまいました。なぜなら、再帰的な練習をするために再帰的なバージョンを実装しているからです。 – vildric

+0

@vildricあなたの質問を編集してこの意志を強調しました。また、私の編集を例にチェックしてください。 –

+0

'some_list.pop()'はリストを変更します。おそらくあなたがこの状況でやりたいことではないでしょう。 –

1

は、私はあなたが私は上記の喚起tryexceptの連続を使用することをお勧め。リストには、一つだけの要素が含まれていることを確認するには、あなたは(1)あなたが最初の要素にアクセスできることを確認するために、そして(2) 2番目にアクセスすることはできませんtryexcept文のカップルを使用することができます素子。

def is_single_item_list(list_to_check): 
    #Check that list is not empty 
    try: 
     _ = list_to_check[0] 
    except IndexError: 
     return False 
    #Return true if list has a single element 
    try: 
     _ = list_to_check[1] 
    except IndexError: 
     return True 
    #Return False if more than one element 
    return False 

実際には、最もPythonの方法は、ちょうどlenを使用することです。

関連する問題