Ich möchte Funktion schaffen, die mich true zurück, wenn die erste Nummer (binär) in zweite Zahl enthält (binär):Wie Bitmaske zu vergleichen?
a = '1100'
b = '0101'
false zurück, aber:
a = '0100'
b = '0101'
true zurück
Wie es zu tun?
Ich möchte Funktion schaffen, die mich true zurück, wenn die erste Nummer (binär) in zweite Zahl enthält (binär):Wie Bitmaske zu vergleichen?
a = '1100'
b = '0101'
false zurück, aber:
a = '0100'
b = '0101'
true zurück
Wie es zu tun?
Sie können eine Liste Verständnis wie folgt verwenden:
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]
und es dann in einer Funktion wickeln je nachdem, welche Art und Weise Sie mögen:
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
Warum nicht einfach 'all (i <= j für i, j in zip ('0100', '0101'))'? –
Ja, hab es schon auf 'all' geändert. Normalerweise brauche ich etwas Zeit, um mich an Python-Builtins zu erinnern und fange an, alles manuell zu machen. Zum "Gte" zugunsten dessen, was ich getan habe, denke ich, dass ich meinen Weg bevorzuge, aber deiner ist genauso gut. Und natürlich kürzer. – Arne
Sie nennen die Funktion 'contains', rufen aber' compare() 'auf. Noch wichtiger, Ihre Methode überprüft nur, ob die erste Zahl eine Teilmenge der zweiten ist. 'compare ('0100', '0101')' gibt 'True' zurück, aber 'compare ('0101', '0100')' gibt 'False' zurück. – Reti43
Sie können dies tun, indem zunächst aus den Binärzahlen zu schaffen der Strings, und als nächstes, machen Sie eine and (&)
auf die Zahlen und prüfen, ob die Ausgabe einer von ihnen entspricht.
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
Wenn Sie für a
anwesend in b
ausschließlich zu überprüfen,
print a & b == a
Wenn eine der Zahlen eine Untermenge der anderen ist, wird AND zu der kleineren der beiden führen. Es wäre ähnlich wie 'c & d == min (c, d)', nicht dass es viel ausmacht. – Reti43
@ Reti43 Nun, für den Fall von nur 2 Ganzzahlen würde 'a & b in (a, b)' etwas besser als 'c & d == min (c, d) 'im Nanosekundenbereich sein :) –
Was die Bedingung verwenden, um genau Sie bisher versucht haben? – Kendas
Warum nicht auf ganze Zahlen analysieren und buchstäblich bitweise Operatoren verwenden? – jonrsharpe
Fragen fragen "Warum funktioniert dieser Code nicht?" muss den Code zeigen, der nicht funktioniert. – tripleee