2017-12-08 12 views
-2

最初の数(バイナリ)は、第2の数(バイナリ)に含まれている場合、私は本当の私を返す関数を作成します:偽ビットマスクの比較方法は?

a = '1100' 
b = '0101' 

返しますが:

a = '0100' 
b = '0101' 

trueを返し

方法それをするために?

+4

を使うのか? – Kendas

+1

整数を解析して文字通りビット演算子を使用してみませんか? – jonrsharpe

+0

「なぜこのコードは動作しないのですか?実際に動作していないコードを表示する必要があります。 – tripleee

答えて

0

あなたは、このようにリストの内包表記を使用することができます。

a_list = '1100' 
b_list = '0101' 

# If a value in a_list is '1', remember if the corresponding value in b_list is '1', too 
[b == '1' for a, b in zip(a_list, b_list) if a == '1'] 
>> [False, True] 

、その後、どのあなたが好きなよう機能でそれをラップ:あなたが最初に出て進数を作成することによってこれを行うことができます

def contains(a_list, b_list): 
    comparison = [b == '1' for a, b in zip(a_list, b_list) if a == '1'] 
    return all(comparison) 

contains('1100', '0101') 
>> False 
contains('0100', '0101') 
>> True 
+0

単純に 'すべて(i

+0

ええ、すでに 'all 'に変更しました。私はPythonの組み込み関数を覚えておくのに時間がかかります。私はすべて手作業で作業を始めます。私がやったことに賛成する「gte」には、私は自分のやり方を好むと思うが、あなたのものは良いものだ。そしてもちろん短期間。 – Arne

+0

関数に 'contains'という名前を付けますが、実際には' compare() 'を呼び出します。さらに重要なことに、メソッドは最初の数値が2番目の数値のサブセットであるかどうかだけをチェックします。 'compare( '0100'、 '0101')'は 'True'を返しますが、' compare '(' 0101 '、' 0100 ') 'は' False'を返します。 – Reti43

1

数字の上にand (&)を実行し、出力がどちらかに一致するかどうかを確認します。

In [14]: str_to_bin = lambda x: int(x, 2) 
    ...: 
    ...: a = '1100' 
    ...: b = '0101' 
    ...: a = str_to_bin(a) 
    ...: b = str_to_bin(b) 
    ...: print a & b in (a, b) 
    ...: 
    ...: a = '0100' 
    ...: b = '0101' 
    ...: a = str_to_bin(a) 
    ...: b = str_to_bin(b) 
    ...: print a & b in (a, b) 
    ...: 
False 
True 

あなたが独占的にabに存在しているかどうかを確認したい場合は、正確にあなたがこれまでに試した持っているどのような条件

print a & b == a 
+0

数字の一方が他方のサブセットである場合、ANDはその2つのうちの小さい方になります。それは 'c&d == min(c、d)'と似ていますが、それは大したことではありません。 – Reti43

+0

@ Reti43実際、ちょうど2の整数の場合、 'a&b in(a、b)'は 'c&d == min(c、d)'よりもわずかに優れています。 –

関連する問題