2015-11-28 3 views
3

У меня есть кортеж '0' и '1', и я хочу xor всего его элемента. Например, если у меня есть ('0', '1', '1', '0'), я хочу получить ((0 xor 1) xor 1) xor 0.xor элемента списка/кортежа

У меня есть следующий (рабочий) фрагмент кода: (? С помощью map и лямбда-функции)

bit = ('0', '1', '0', '1', '0', '1', '0') 
out = bit[0] 
for i in range(1,len(bit)): 
    out = int(out)^int(bit[i]) 
print str(out) 

Как я могу сделать это в более вещий ау

+0

Почему дополнительный «xor 1» в примере? У вас было «0, 1, 1». Результаты должны быть «0 xor 1 xor 1' – hjpotter92

+0

Отредактировано, спасибо. –

ответ

9
print reduce(lambda i, j: int(i)^int(j), bit) 

уменьшить (...) уменьшить (функция, последовательность [, начальная]) -> значение

Применить функцию двух аргументов кумулятивно к элементам последовательности ence, слева направо, чтобы уменьшить последовательность до одного значения. Например, уменьшить (лямбда x, y: x + y, [1, 2, 3, 4, 5]) вычисляет ((((+1 + 2) +3) +4) +5). Если исходный присутствует, он помещается перед пунктами последовательности в расчете и используется по умолчанию, когда последовательность пуста.

+0

Кажется замечательным. Не могли бы вы немного объяснить? –

+0

try 'help (уменьшить)' в оболочке python – zephor

+1

Применить функцию двух аргументов кумулятивно к элементам последовательности слева направо, чтобы уменьшить последовательность до одного значения. Например, сокращение (lambda x, y: x + y, [1, 2, 3, 4, 5]) вычисляет ((((1 + 2) +3) +4) +5). Если начальное значение присутствует, оно помещается перед элементами последовательности в вычислении и используется по умолчанию, когда последовательность пуста. – zephor

0

Как уже упоминалось, сокращение хорошо работает. Если вы прочтете о сокращении, вы столкнетесь с концепцией fold, которая является функцией более высокого порядка (например, карта).

На некоторых языках вы можете складывать влево или вправо. Интересно, что в вашем случае вы получите тот же результат, если бы вы начали слева или справа, так как xor является коммутативным и ассоциативным.

Смежные вопросы