Как преобразовать список целых чисел в одно целое число без использования строковых функций?
У меня есть список целых чисел, которые я хотел бы распечатать как одно целое число, но я не могу использовать функцию, связанную со строками
x_lst =[ 1, 4, 5 ,23, 34,4, 4 ,2,1,34,342 ]
print ( "".join(list(map(str, x_lst))))
desired output:
Желаемый результат:
145233444213434234
Вышеуказанный скрипт преобразует каждое целое число в строку, а затем сливает их вместе, но я не могу использовать str (). Есть ли другой способ преобразовать этот список в одно целое число без использования чего-либо, связанного со строками?
Ответы (5 шт):
Do you need to convert it to a single string exactly or you need to print it like single string?
Вам нужно конвертировать его именно в одну строку или вам нужно вывести его, как одну строку?
You can use
endkey to print it without\n:
Вы можете использовать ключ end, чтобы вывести его без \n:
for x in x_lst:
print(x, end='')
You can use an integer division to convert list of integers to a single integer:
Вы можете использовать целочисленное деление, чтобы преобразовать список чисел в одно число:
x_lst = [1, 4, 5 ,23, 34, 4, 4, 2, 1, 34, 342]
result = 0
for x in x_lst:
t = 0
while x:
t *= 10
t += x%10
x //= 10
while t:
result *=10
result += t%10
t //= 10
del t
print(result)
Result:
Результат:
1452334442134342
Можно каждый раз брать число из конца списка, умножать его на 10 в степени разряда текущего результата и прибавлять к нему текущий результат.
x_lst =[1, 4, 5 ,23, 34, 4, 4 ,2, 1, 34, 342]
x_lst.reverse()
result = x_lst.pop(0)
for x in x_lst:
n, i = result, 0
while n > 0:
n = n // 10
i += 1
result = x * (10 ** i) + result
print(result)
можно воспользоваться рекурсией и десятичным логарифмом:
import math
def f(lst, pow=0):
if len(lst) == 1:
return lst.pop() * 10**pow
x = lst.pop()
new_pow = math.ceil(math.log10(x))
return x * 10**pow + f(lst, pow + new_pow)
In [150]: f(x_lst.copy())
Out[150]: 145233444334342
PS асимптотическая сложность алгоритма - O(n)