確認方法を教えてください場合のリストが空っぽになってはいませんか?
質問
例えば、グループにおきましては、以下の
a = []
確認方法を教えてくださいま a
はが空っぽになってはいませんか?
解決
if not a:
print("List is empty")
用暗黙のbooleannessの空 list
あpythonic.
他のヒント
のpythonicについて教えてくださいから PEP8スタイルガイド ( あり ことを推奨"、 No ています"):
のための配列(文字列、リストタプルを使用することは空の配列をfalseになります。
有: if not seq: if seq: No: if len(seq): if not len(seq):
いを明示的に:
if len(li) == 0:
print('the list is empty')
この方法では100%に明らかに li
はシーケンス(リスト)を試したいと思いました。私の問題 if not li: ...
この誤る li
はbooleanに変更します。
他人が見を一般化の問題だけでなく、リストって思ったのを除い点に注意タイプの異なる配列がたくさんの人が利用、特にこのgoogleヒット"pythonの試験は空の配列"となります。
その他の方法でなめても済む配列
必要なくても済む配列を、その他の方法で作 list
sまたはその他の標準器が正常に行えない現象を改善ても済む配列.私はその理由を説明は、以下のもの 優先出法 を使用 size
.
の"pythonic"うな:第1部
の"pythonic"うで失敗しても済む配列が互いても済むというキャストの配列の配列 bool
s if x
という評価すべての方 bool
s回のような集計の真理値です。こいです ValueError
:
>>> x = numpy.array([0,1])
>>> if x: print("x")
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
の"pythonic"うな:第2部
しかし、少なくとも、場合には、上記を教えてくれることに失敗しました。せてもらう良い機会になりそうだしていても済む配列と厳密に一つの要素、 if
分析の仕事の感覚が得られないときには、いくつかのエラーとなります。ただし、この一つの要素が 0
( 0.0
, や False
,...)、 if
書誤の結果 False
:
>>> x = numpy.array([0,])
>>> if x: print("x")
... else: print("No x")
No x
しかし、チャイコフスキーは x
が存在しない空!この結果はいかにあります。
を使用 len
では予期しない結果
例えば、
len( numpy.zeros((1,0)) )
返り値が1のものの配列がゼロです。
のnumpythonic方法
なるということではないかもしれ SciPy FAQ, 正解の方法は、すべてから取り寄せた選りすぐりしていても済む配列を使用 if x.size
:
>>> x = numpy.array([0,1])
>>> if x.size: print("x")
x
>>> x = numpy.array([0,])
>>> if x.size: print("x")
... else: print("No x")
x
>>> x = numpy.zeros((1,0))
>>> if x.size: print("x")
... else: print("No x")
No x
だかはまだわかりませんが、いずれも list
, aても済む配列、または何か、をこのアプローチ その答えは@dubiousjimを かどうかを確認するために適切な試験を使います。ないもの"pythonic"が、ここで示されているデても済む意図的に破pythonicity少なくともないでしょう。
が必要な場合だけではダメだと思うのでチェックが入力された場合は空を使うその他のても済むように割り出し又は数学の事業はあるんじゃないでしょうかより効率的な(とも共通の入力 する しても済む配列になります。があり素敵な機能のためにこの素早くそして最も大切な numpy.asarray
.そこにご入力いになっていない場合、何も行いますので配列、またはラップをご入力配列の場合は、リストタプル等 オプションとして変換した dtype
.ているので、とても速いので、こうすることについて、入力しても済む配列になります。また通常のものが使用する同じ名前の変換に配列できないの 範囲:
x = numpy.asarray(x, dtype=numpy.double)
この x.size
チェック全てのケースで見えます。
う場合はチェックリストが空である
例えば、グループにおきましては、以下の
a = []
確認方法を教えてくださいがはが空っぽになってはいませんか?
答え:
場所のリストがbooleanのコンテキスト(例えば、 if
または while
決算).で試験 False
場合は空となっておりますので、 True
します。例えば:
if not a: # do this!
print('a is an empty list')
に訴える権限
PEP8, はPythonのスタイルガイドのためのPythonコードをPython標準図書館を主張す:
のための配列(文字列、リストタプルを使用することは空の配列をfalseになります。
Yes: if not seq: if seq: No: if len(seq): if not len(seq):
ことが期待できることを標準ライブラリコードとしてperformant-修正が可能です。しかし、なぜその場合は、なぜ必要があります。
説明
ということでしょう参照コードのようなことから、経験を積んだプログラマの新Python:
if len(a) == 0: # Don't do this!
print('a is an empty list')
ユーザーの怠け者の言語にするように誘惑されること:
if a == []: # Don't do this!
print('a is an empty list')
これらの正確であり、それぞれのその他の言語を学んでいます。この意味的にも正しい。
というので国連PythonicがPythonに対応した意味に直接リストオブジェクトのクリーンルームなどのboolean型強制.
から docs (注具体的には、包摂の空のリスト []
):
デフォルトでは、オブジェクトはtrueでなければクラスで定義する のいずれか
__bool__()
る方法を返しますFalse
または__len__()
方法 このゼロを返しますが呼び出されるオブジェクトです。ここでは内蔵のオブジェとfalse:
- 定数を定義するfalse:
None
やFalse
.- ゼロの数値タイプ:
0
,0.0
,0j
,Decimal(0)
,Fraction(0, 1)
- 空の配列がコレクション:
''
,()
,[]
,{}
,set()
,range(0)
のdatamodelドキュメンテーション
を実現するために呼び出され値検査に操作
bool()
;返さなければなFalse
またはTrue
.このメソッドが定義されていないと__len__()
"と呼ばれるものが定義されている、オブジェクトである場合はtrue、その結果がゼロでない.場合のクラスで定義するもの__len__()
も__bool__()
, 全てそのインスタンスは考えます。
や
を実現するために呼び出され、組み込み関数
len()
.きの長さを返しオブジェクトの整数>=0になります。また、オブジェクトを定義していません、__bool__()
方法及びその__len__()
メソッドはゼロとされる場合はfalse Booleanトします。
その代わりにこの:
if len(a) == 0: # Don't do this!
print('a is an empty list')
この:
if a == []: # Don't do this!
print('a is an empty list')
い:
if not a:
print('a is an empty list')
いことをやるというのPythonic通常納車績
なのです。(注が少ない時間に行うと同等の操作がより良い:)
>>> import timeit
>>> min(timeit.repeat(lambda: len([]) == 0, repeat=100))
0.13775854044661884
>>> min(timeit.repeat(lambda: [] == [], repeat=100))
0.0984637276455409
>>> min(timeit.repeat(lambda: not [], repeat=100))
0.07878462291455435
スケール、コストの呼び出し機能の構築及び復は空のリストですが差し引からのコストの空チェックを使用上:
>>> min(timeit.repeat(lambda: [], repeat=100))
0.07074015751817342
をまとめると のいずれか チェックのための長さの組み込み機能 len
比 0
または チェックに対して空のリストが 多く 少performantを使った組み込み構文の言語として記載されています。●
なぜですか?
のための len(a) == 0
チェック:
第Pythonにはチェックのグローバル変数が len
は影.
その呼び名を付けなければな機能を、負荷 0
, いに等号比較のPythonでは、C):
>>> import dis
>>> dis.dis(lambda: len([]) == 0)
1 0 LOAD_GLOBAL 0 (len)
2 BUILD_LIST 0
4 CALL_FUNCTION 1
6 LOAD_CONST 1 (0)
8 COMPARE_OP 2 (==)
10 RETURN_VALUE
とに [] == []
この構築を必要以上にリストしまい、比較動作にPythonの仮想マシン(C)
>>> dis.dis(lambda: [] == [])
1 0 BUILD_LIST 0
2 BUILD_LIST 0
4 COMPARE_OP 2 (==)
6 RETURN_VALUE
の"Pythonic"の方が簡単になり、早くチェックからリストの長さをキャッシュのオブジェクトインスタンスヘッダ:
>>> dis.dis(lambda: not [])
1 0 BUILD_LIST 0
2 UNARY_NOT
4 RETURN_VALUE
証拠からは、C言語のソース文書
この拡張
PyObject
追加のob_size
ます。これは概念を持つオブジェクトの長さです。こなわれることはほとんどありませんのPython/C APIに含まれています。この分野の定義の拡大によりPyObject_VAR_HEAD
クリックします。
からは、c言語のソースに するようになりますのでlistobject.h:
typedef struct {
PyObject_VAR_HEAD
/* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
PyObject **ob_item;
/* ob_item contains space for 'allocated' elements. The number
* currently in use is ob_size.
* Invariants:
* 0 <= ob_size <= allocated
* len(list) == ob_size
を楽しんで頂きたいと思いますを研究することが多いんですが時間芸私の答えなのです。たくさんい残して何か教えてくださいコメントとなります。
空のリスト自身が考える場合はfalse true値試験( pythonドキュメント):
a = []
if a:
print "not empty"
@トーマス大仁
編集:もう一対の試験 空のリストとしてFalse:う 多型?なんかよ リストされリストアップしました。べきであるだけで quackのように鴨-どう おduckCollectionにquack "False"でない要素がない?
おduckCollection実施するべきである __nonzero__
または __len__
その場合:働問題なく行えます。
パトリック(可)回答 左右 if not a:
の権利について教えてください。 ハーレー Holcombeの回答 はこのPEP8スタイルです。その答えを説明することができたら良いアイデアの熟していないと言われるものの、いうな明示的な複雑ルビーユーザーなどを実行します。
Pythonコード、およびPythonの地域で、非常に強いイディオム.以上のわざをお客様のコードを読みやすくなり誰でも経験した。や違反した場合はそのイディオムが、強い信号です。
それは、 if not a:
な区別は空のリストから None
, 又は数値が0または空のタプル、または空のユーザー作成されたcollectionの種類、または空のユーザー作成されない----------モーニングの収集タイプ、またはシングルエレメンても済む配列としてscalarsとfalsey値等のができています。その場合は、知っていま 何 する明確約できますので試験う。例えば、 if not a and a is not None:
と"なんでもfalseyを除なし"を if len(a) != 0:
ことだけは空の配列、もの以外の配列はエラーはこちら"です。試験のほかに、自動車用いただけたらと思っている試験は、これまた信号のリーダーがこの試験は重要です。
がいを明示的に約以外のもの if not a:
は誤解を招くリーダー.いシグナルのものとして重要な時にい分けるどれがいいですか?(できることも、コードの対応は鈍化など、それ以下になります。 ば 愛 誤解を与えるリーダーは、そのまま い る必要は別に、今度は普れて"泣き狼"全体のコードです。
なぜチェックは全くないのでしょうか。
あついてのご質問 必要 テストのリスト。がお客様よりご提供いただいた追加の文脈で、なんとなく想像できることは必要ないかもしれませんが、このチェックする箇所があるので、慣れないリスト処理でエラーになります。
いるという見解もの 最pythonic 方法はチェックがいただけませんので、することによるものであり、かの処理を一覧です。この方法で正しいことを行うかどうか空います。
a = []
for item in a:
<do something with item>
<rest of code>
この取り扱いの内容 a, を必要としない特定のチェックのための空しさなどです。の場合 a 空の依存のブロックは実行されない訳者の秋を次の行に折り返します。
う場合の実際の確認が必要となるため配列空、その他の回答になります。
len()
はO(1)操作 Pythonリスト、文字列、dicts、セット。Pythonの内部クラスは、バイトの数の要素をこのコンテナ
JavaScript 類似の概念truthy/falsy.
私の記述:
if isinstance(a, (list, some, other, types, i, accept)) and not a:
do_stuff
人-1になります。思いが読者の反対の戦略は考えないもしています。まふりをしたのか---もカウントとして"pythonic"---これは、正しい戦略です。いないが、対処できる場合 a
ですが、例えば、 False
, に、必要な試験より厳しい方のよう if not a:
.きものを使っておけば間違いないようになります:
if isinstance(a, numpy.ndarray) and not a.size:
do_stuff
elif isinstance(a, collections.Sized) and not a:
do_stuff
最初の試験に対@Mikeの答えます。第三線うき換え
elif isinstance(a, (list, tuple)) and not a:
くださいインスタンスの特定の種類(およびそのサブタイプ)または:
elif isinstance(a, (list, tuple)) and not len(a):
ずに逃げることができ、明確な型チェックがなされた場合にのみ、周囲の文脈できる良いること a
値の種類にいた場合、またはかる種類まな取り扱い上の誤りなど、 TypeError
お問い合わせいただいた場合 len
価値で、未定義の際に必要となります。ん用意します。一般的には、"pythonic"会いに行くこの最後ます。絞りのように鴨を及ぼす場合がありますので上げるDuckErrorっていることを確認してくださいノウハウをquack.だい 考え についての想いは、いかどうかの例のない準備を適切に取り扱うもろの誤りに存在するかチェックします。しても済む配列が良い例が盲目的に依存し len
またはboolean網がありませんかんや文化を用いて作られています。
から 文書 関真理値試験
すべての値以外に掲載されている以外にもここがれ True
None
False
- ゼロの数値タイプは、例えば、
0
,0.0
,0j
. - 合は空の配列、例えば、
''
,()
,[]
. - 任意の空のマッピングは、例えば、
{}
. - インスタンスのユーザー定義の授業の場合、クラスを定義します
__bool__()
または__len__()
方法、その方法を返します整数のゼロまたはbool型の値False
.
これをみると、空のリスト []
は falsy, なっているboolean値の音を最も効率的:
if not a:
print('"a" is empty!')
ここでいくつかの方法で確認できた場合、リストが空である:
a = [] #the list
1) のインターネットはモバイルpythonic方法:
if not a:
print("a is empty")
Pythonでは、 空容器 など、リストタプルセットdicts、変数などに見られているとい False
.ができ、リストとして、述語(返すBoolean値).や True
値が示することで非空です。
2) はるかに明示方法:を使用 len()
の長さをチェックの場合に等しい 0
:
if len(a) == 0:
print("a is empty")
3) または比較すが匿名の場合、空のリスト:
if a == []:
print("a is empty")
4) 他のい 馬鹿げ に行うには exception
や iter()
:
try:
next(iter(a))
# list has elements
except StopIteration:
print("Error: a is empty")
うに
if a == []:
print "The list is empty."
方法1(優):
if not a :
print ("Empty")
方法2:
if len(a) == 0 :
print( "Empty" )
方法3:
if a == [] :
print ("Empty")
def list_test (L):
if L is None : print 'list is None'
elif not L : print 'list is empty'
else: print 'list has %d elements' % len(L)
list_test(None)
list_test([])
list_test([1,2,3])
でも良い試験 None
や空虚感が別途ことによって、二つの異なる。上記のコードの出力できます。
list is None
list is empty
list has 3 elements
ものであること None
はfalsy.でない場合は別試験 None
らしさを継続してご利用いただけます。
def list_test2 (L):
if not L : print 'list is empty'
else: print 'list has %d elements' % len(L)
list_test2(None)
list_test2([])
list_test2([1,2,3])
生産予定
list is empty
list is empty
list has 3 elements
多くの回答を与えられていくデジモンアドベンチャー。そう思ってやってきました追加のチェック
not a
もパス None
その他の種類の空構造です。したければチェックのための空のリスト、これを実行する事ができます。:
if isinstance(a, list) and len(a)==0:
print("Received an empty list")
感@dubiousjimソリューションを提案したいと考えている利用追加の総合チェックのかどうかで何かのlist
import collections
def is_empty(a):
return not a and isinstance(a, collections.Iterable)
注意:文字列とされるlist.-追加 and not isinstance(a,(str,unicode))
したい場合は空の文字列を除外する。
試験:
>>> is_empty('sss')
False
>>> is_empty(555)
False
>>> is_empty(0)
False
>>> is_empty('')
True
>>> is_empty([3])
False
>>> is_empty([])
True
>>> is_empty({})
True
>>> is_empty(())
True
もできるので使ってみbool()このような
a = [1,2,3];
print bool(a); # it will return True
a = [];
print bool(a); # it will return False
私はこのようにチェックリストが空です。
非常に簡便で有用です。
簡単な方法はチェックの長さはゼロになります。
if len(a) == 0:
print("a is empty")
print('not empty' if a else 'empty')
もう少し実践:
a.pop() if a else None
からpython3以降利用できる
a == []
チェックの場合のリストが空である
編集:この作品python2.7あります。
私にはなぜ多くの複雑な応答となります。か明確でわかりやすい
また、簡単なる場合は、他の
list=[]
if len(list)==0:
print ("list is empty")
else:
print ("list is not empty")
単に利用is_empty()は関数のように:-
def is_empty(any_structure):
if any_structure:
print('Structure is not empty.')
return True
else:
print('Structure is empty.')
return False
で利用されることdata_structureのようなリストタプル、辞書。これまで何度でも呼ん is_empty(any_structure)
.
るかどうかをチェックリストが空白または使用は、主に以下の方法があります。.でも思い出しを避ける方法を明示的にチェックのための配列リストです
less pythonic
方法):
def Enquiry(list1):
if len(list1) == 0:
return 0
else:
return 1
# ––––––––––––––––––––––––––––––––
list1 = []
if Enquiry(list1):
print ("The list isn't empty")
else:
print("The list is Empty")
# Result: "The list is Empty".
第二の方法は、
more pythonic
ます。このメソッドは暗黙の確認くことがより好ましいに立つようになりました。
def Enquiry(list1):
if not list1:
return 1
else:
return 0
# ––––––––––––––––––––––––––––––––
list1 = []
if Enquiry(list1):
print ("The list is Empty")
else:
print ("The list isn't empty")
# Result: "The list is Empty"
武器agiは、dexで下がらないboxerぐ.
チェックの場合: len(list) == 0
戻り値: True
を確認することができます場合はリストが空である;
l = []
if l:
# do your stuff.
を確認することができます天気のすべての値のリストは空になります。
l = ["", False, 0, '', [], {}, ()]
if all(bool(x) for x in l):
# do your stuff.
しかし、これは実は空の一覧です。
def empty_list(lst):
if len(lst) ==0:
return false
else:
return all(bool(x) for x in l)
現在利用できる:
if empty_list(lst):
# do your stuff.
真実の値は空のリスト False
は非空のリストです True
.
よいこの特殊用途-事例私たが、 機能 れば教えてリストが空です。たいと思ったの書き込みを防ぐ自分の機能を利用したラムダ仕様の表現はこちられるようになったとするようにシンプルであるべき):
foo = itertools.takewhile(is_not_empty, (f(x) for x in itertools.count(1)))
もちろん、自然について教えてください:
foo = itertools.takewhile(bool, (f(x) for x in itertools.count(1)))
もちろん、 ない 使用 bool
に if
( if bool(L):
ですが更新されません。ですが、場合には"はい空"は、明示的に必要として機能 bool
は最適な選択です。
A像の使い方 pop
や try
except
条項(unrecommended):
a = []
try:
a.pop()
print('list isn\'t empty')
except:
print('list is empty')
出力:
list is empty
非公式のアプローチ:
a = []
try:
print(a[-1])
except IndexError:
print("List is empty")