2016-02-03 12 views
5

私は空の文字列があると、それが分割されます:リストに空の要素が含まれているかどうかを確認するにはどうすればよいですか?

>>>''.split(',') 
[''] 

分割の結果は['']です。私はboolを使って空であるかどうかをチェックします。それはTrueを返します。

>>>bool(['']) 
True 

分割結果が空であることを確認するにはどうすればよいですか?

+0

。空リストではありません。私はその状況を除外したいと思う。私はやり方を考えている。 – Tony

+0

最終的に、何をしようとしていますか?最初に空のリストを分割しようとしても意味がありません。リスト内のif文またはif式でこのコードをゲートすることができます: 'if s1:s2 = s1.split( '、').. ' – smci

答えて

7

bool([''])の場合、リスト['']にはの内容があり、の場合は空の文字列''が表示されます。

リスト内のすべての要素は、あなたがall()組み込み関数を使用することができます(リストは文字列''が含まれているので、もしそれがFalseを返します)「空」ではありませんかどうかを確認したい場合は:

all(v for v in l) 

それはTrue値を持っている場合、これはリストlをチェックして、すべての要素vかかります。 すべて要素の場合は、Trueが返されます。少なくとも1つでも返されない場合は、Falseが返されます。例として:場合は、部分的なチェックを実行して見ることがany()でこれを置き換えることができ

l = ''.split(',') 

all(v for v in l) 
Out[75]: False 

リストl内の項目のいずれかがTrueの価値を持っています。両方の用途に

より包括的な例*:

l = [1, 2, 3, ''] 

all(l) 
# '' doesn't have a True value 
Out[82]: False 

# 1, 2, 3 have a True value 
any(l) 
Out[83]: True 

* @ShadowRangerはコメントで指摘したように、彼らの両方がちょうど受け入れることから、まったく同じものはall(l)またはany(l)で行うことができます最後は反復可能です。

+3

簡素化:'すべて(vの場合はv) 'を'すべて(l) 'に変更します。 'all'が' list'を直接処理できるときに特別なジェネレータ式を作る必要はありません。 – ShadowRanger

+3

また、 'all'と' any'を反転しました。 'all'はすべての結果が空でない場合、空でない要素がない場合、' any'は空でない要素を持つ場合( '空 'を持つ可能性がありますが' any'が 'True '、少なくとも1つは空ではない)。おそらくここでは 'any'が役に立つでしょう。 – ShadowRanger

0

分割結果は空ではありません。あなたが探している「空虚」の感覚は最高の元、分割されていない文字列を見ることで確認されています

if not original_string: 
    # It's empty. 

しかし、あなたは本当にこのため、分割結果を見たい場合:

if len(split_result) == 1 and not split_result[0]: 
    # It's "empty". 
1
あなたのケースで

それ本当にありえない空のそのリスト内の要素が空であるかどうかをチェックしたい場合は、行うことができます

string = ''.split(',') 

if not string[0]: 
    print "empty" 
0

str.split() documentation,「空の文字列を指定した区切り文字で分割すると['']が返されます。あなたは(split(",")の使用など)の明示的な区切り文字を使用しているとき、「

は、このような場合のためにチェックするには、このような何か:

l = s.split(",") 

if len(l) == 1 and l[0] == '': 
    print("string was empty") 
1

を空虚は重要な結果である場合は、おそらく最高をテストします最初の元の文字列:

x = '' 
if x: 
    # Original string was non-empty, split it 
    splitx = x.split(',') 
    if any(splitx): 
     # There was at least one character in the original string that wasn't a comma 

最初のテストルールアウト空の最初の文字列を、分割された文字は何もなかったので、全体を返された文字列をanyルールを使用して、第2の1空の文字列が束になっていますが、空でない文字列はありません。 1つの空でない文字列がある限り、それはパスします。

注:CSVファイルを解析する場合は、.split(',')を使用しないでください。これを正しく処理する(エスケープやクォーテーションなどを含む)csv moduleがあります。常にをCSVの解析に使用する必要があります。追加ボーナス:csv''の入力を[]行に変換します。['']のような真実性を直接テストすることはできません。str.splitのようになります。例:まだ引用処理しないstr.split(',')と同じアプローチ対

>>> import csv, io 

>>> f = io.StringIO('\n\na,b,c\n1,2,3\n\n') 
>>> [row for row in csv.reader(f) if row] # Stripping easily 
[['a', 'b', 'c'], ['1', '2', '3']] 

、エスケープなど:私が見

>>> f = io.StringIO('\n\na,b,c\n1,2,3\n\n') 
>>> stripped = (line.rstrip('\r\n') for line in f) # Must manually strip line endings first 
>>> [line.split(',') for line in stripped if line] 
[['a', 'b', 'c'], ['1', '2', '3']] 
関連する問題