Мне нужно суммировать элементы списка, содержащие все нули или единицы, так что результат равен 1, если в списке есть 1, а 0 в противном случае.(Двоичный) Суммирование элементов списка
def binary_search(l, low=0,high=-1):
if not l: return -1
if(high == -1): high = len(l)-1
if low == high:
if l[low] == 1: return low
else: return -1
mid = (low + high)//2
upper = [l[mid:high]]
lower = [l[0:mid-1]]
u = sum(int(x) for x in upper)
lo = sum(int(x) for x in lower)
if u == 1: return binary_search(upper, mid, high)
elif lo == 1: return binary_search(lower, low, mid-1)
return -1
l = [0 for x in range(255)]
l[123] = 1
binary_search(l)
код я использую для тестирования
u = sum(int(x) for x in upper)
отлично работает в интерпретаторе, но дает мне ошибку
TypeError: Int() аргумент должен быть строкой или числом , а не «список»
Я только начал использовать python и не могу понять, что происходит не так (версия, написанная на C++, тоже не работает).
У кого-нибудь есть указатели?
Также, как бы я сделал сумму, чтобы она была двоичной, а не просто десятичной с добавлением?
Где именно "x"? – arshajii
Вам просто нужна функция '' any' (http://docs.python.org/3/library/functions.html#any)? –
@BrendanLong да, оказалось, что сработало. Первый день с Python. –