2017-11-29 13 views
0

私はlistの第1要素とリストのすべての要素を比較しています。もし偽があれば、私は偽を返す必要があります。またはすべてが真実なら、真を返す必要があります。現在私はif-elseでこれをやっています。 bool値を返すためにあらゆる神託の方法はbool値をリスト内で比喩的に比較して返しますか?

def checker(inp): 
    _compare = [ _==inp[0] for _ in inp] 
    return False if False in _compare else True 

lst = [5, 5, 5] 
lst2 = [5, 5, 6] 

# Case 1 
level = checker(inp=lst) 
print(level) 
True 

# Case 2 
level2 = checker(inp=lst2) 
print(level2) 
False 

あり、この

return False if False in _compare else True 
+0

_compare' –

+0

でちょうど 'Falseの場合、より簡単な方法であなたの問題を述べるようにしてください:あなたは、リスト内のすべての項目があるかどうかを把握したいですリストが同種であるかどうか、同じですか? – deceze

+0

はい@decezeリスト内のすべての数字が同じ場合返されたい場合はTrue False –

答えて

1

、リスト内のすべての数字が同じであれば、私はTrueを返したくない場合はFalseを

最も単純な方法:

return len(set(inp)) == 1 

これはハッシュ可能であることを値を必要としません、単純な数字があります。

2

False in _compareを達成するために、任意の神託の方法はとても

return False not in _compare 

がそれを行うための最善の方法で、すでにブール値です。

より広い探して:

_==inp[0] for _ in inp 

は、1つの値がこのソリューションでは、アイテムがハッシュ可能でない場合でも動作しますFalse

であればそれはFalseを返し

return all(x==inp[0] for x in inp) 

でなければなりません。

+1

'return False in _compare'はboolの値と反対になります。ケース1はFalseを返し、ケース2はTrueを返します –

+0

'Falseではない_compare'その後... – deceze

+0

yupありがとう私は二重否定が何もしなかったことを確かめませんでした。 –

1

あなたの問題は、「私のリスト内のすべての要素が同一であるかどうかを確認する必要があります」という質問と同じです。だからあなたはまたこのようにそれを解決することができます:

def checker(inp): 
    return len(set(inp)) == 1 

それはそれについて行くために最もpythonic方法です..私は知らない。

編集:非ハッシュ項目の場合は代替:

def checker(inp): 
    return not [True for i in range(len(inp) - 1)) if [inp[i] != inp[i+1]] 
+0

リストアイテムがハッシュ可能であると仮定しています。 – chepner

+0

@chepner washable、あなたは本当の言葉だったと私には確信していたかもしれないが、 –

+1

ばかげたオートコレクトをキャッチするかもしれない;) – chepner

関連する問題