Ответ 1
Если вы просто хотите напечатать номер, а не return
фактический int
:
>>> a = [12,4,15,11]
>>> print(*a, sep='')
1241511
Мне нужно присоединиться к элементам в списке без использования команды соединения, поэтому, если у меня есть список:
[12,4,15,11]
Выход должен быть:
1241511
Вот мой код:
def lists(list1):
answer = 0
h = len(list1)
while list1 != []:
answer = answer + list1[0] * 10 ** h
h = h - 1
list1.pop(0)
print(answer)
Но, в конце концов, ответ заканчивается 125610
, который явно ошибочен.
Я думаю, что логика в порядке, но я не могу найти проблему?
Если вы просто хотите напечатать номер, а не return
фактический int
:
>>> a = [12,4,15,11]
>>> print(*a, sep='')
1241511
Вы можете просто преобразовать каждый элемент в string
, добавить их, а затем преобразовать обратно в int
:
def lists(list1):
answer=''
for number in list1:
answer+=str(number)
print(int(answer))
lists([12,4,15,11])
>>>
1241511
s = ""
for x in map(str, x):
s += x
print(s)
1241511
Может быть еще несколько параметров, например
>>> lst=[12,4,15,11]
>>> str(lst).translate(None, '[,] ')
'1241511'
>>> join = lambda e: str(e[0]) + join(e[1:]) if e else ""
>>> join(lst)
'1241511'
>>> ("{}"*len(lst)).format(*lst)
'1241511'
>>> reduce(lambda a,b:a+b,map(str,lst))
'1241511'
числовое решение, используя ваш код
import math
def numdig(n):
#only positive numbers
if n > 0:
return int(math.log10(n))+1
else:
return 1
def lists(list1):
answer = 0
h = 0
while list1 != []:
answer = answer * 10 ** h + list1[0]
list1.pop(0)
if list1 != []:
h = numdig(list1[0])
print(answer)
lists([12,4,15,11])
Вы можете попробовать map
и reduce
с помощью lambda
следующим образом:
def without_join(alist):
try:
return int(reduce(lambda a,b: a + b, map(str, alist)))
except ValueError, error:
print error
return None
print without_join([12,4,15,11])
Здесь полностью численное решение, отвлекающее ваше понятие от востребования с полномочиями 10. Вы были на правильном пути, но ваша реализация предполагала, что все значения имеют длину в 1 разряд.
import math
def lists(list1):
b = 0
foo = 0
for item in reversed(list1):
b += item*(10**foo)
foo += int(math.floor(math.log10(item))) + 1
return b
a = [12, 4, 15, 11]
print lists(a)
Это возвращает 1241511
, как было запрошено.
Все, что я делаю здесь, перебирает список в обратном порядке и отслеживает, сколько цифр слева мне нужно сдвинуть каждое значение. Это позволяет целые числа с произвольным числом цифр.
list_name_of_program = [a,b,c,d,e,f]
program = ""
for pro in list_name_of_program:
program += str(pro)
program += "," # you can use seprator a space " " or different
print(program[:-1])
'a,b,c,d,e,f'