2017-01-17 7 views
-3

Pythonで3桁の数字を逆にしたいと思います。私は以下のような文字列がある場合 は:Pythonで文字列の逆数値を1つ返します

000 

を私は一度に一つだけ3から数字を逆にしたいです。だから私は持っていたい:

100 or 010 or 001 

私のようなものでこれを行うことができる午前:

tmp = 000 
first = int(not(int(tmp[0]))),tmp[1],tmp[2] 

そして、私は取得しています:

(1, '0', '0') #instead of 100 

をだから私は推測する、私は他の必要キャストなど。

もっと効率的で簡単な方法で同じことをすることはできますか?この種のキャスティングは面倒です。 すべてのアイデアありがとう!仕事と逆の値を持つ辞書を使用して

+0

*逆の数字* - 入力には「0」と「1」の数字しかないでしょうか? – RomanPerekhrest

+0

バイナリ*数字について話していますか?だから私たちは自分で数字を選ぶことができますか? –

+0

整数のビットを反転するのは簡単です。 xor '^'を使うことができます。または文字列を作成しようとしていますか?あなたの予想される入力と出力は何ですか? – khelwood

答えて

1

>>> flip = {'0': '1', '1':'0'} 
>>> s = '000' 
>>> flip[s[0]] + s[1:] 
'100' 
>>> s[0] + flip[s[1]] + s[2] 
'010' 
>>> s[:2] + flip[s[-1]] 
'001' 
+0

これは最高のソリューションです!ありがとうございました! – Tatarinho

0

反転したビットを決定する変数indexを取るリスト内包を介して別のオプション。

index = 1 # Which bit to flip 
flip = {'0': '1', '1':'0'} # shortcut to flip 
''.join([x if i != index else flip[x] for i, x in enumerate(string)]) 

や辞書では、インライン化:

簡単に機能にすることができる
''.join([x if i != index else {'0': '1', '1': '0'}[x] for i, x in enumerate(string)]) 

def flip(string, index): 
    return ''.join([x if i != index else {'0': '1', '1': '0'}[x] for i, x in enumerate(string)]) 
1
def inverse(stri,n): 
    nums = list(stri) 
    if(int(nums[n])==1): 
     nums[n] = '0' 
    elif(int(nums[n])==0): 
     nums[n]= '1' 
    else: 
     return -1 
    return ''.join(map(str,nums)) 


print inverse('000',2) 

戻っ '001'

1

方法についてのビットごとのOR(|)?私はこれがALUができる基本的な操作であるため、より速い(少なくとも低いレベルで)と思うだろう。その後、キャスティングやその他の操作がすべて行われていると、ややアカデミックかもしれません。 (私を許して、私は、Pythonを学ぶために始めている)のような 何か:確か

>>>tmp = '000' 
>>>bit_to_flip = 4 
>>>result = int(tmp)|bit_to_flip 
>>>formatted_result = "{0:b}".format(result).zfill(len(tmp)) 
>>>formatted_result 
'100' 

は、あなたは...各バイナリ数字1,2,4,8、などの唯一の10進値を指定する必要があります) 。あなたがそれを心配したくなければ、私は少なくともマイケルを使いやすくするために(もし辞書が一定時間O(1)である)を保存する場合を除いて、上記のマイクのような辞書を使用します:

>>>tmp = '000' 
>>>bits_dict = {'1': 1, '2':2, '3':4} 
>>>bit_to_flip = '1' 
>>>result = int(tmp)|bits_dict[bit_to_flip] 
>>>formatted_result = "{0:b}".format(result).zfill(len(tmp)) 
>>>formatted_result 
'001' 
関連する問題