Объединение элементов в список без команды соединения

Мне нужно присоединиться к элементам в списке без использования команды соединения, поэтому, если у меня есть список:

[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, который явно ошибочен.

Я думаю, что логика в порядке, но я не могу найти проблему?

Ответы

Ответ 1

Если вы просто хотите напечатать номер, а не return фактический int:

>>> a = [12,4,15,11]
>>> print(*a, sep='')
1241511

Ответ 2

Вы можете просто преобразовать каждый элемент в string, добавить их, а затем преобразовать обратно в int:

def lists(list1):
    answer=''
    for number in list1:
        answer+=str(number)
    print(int(answer))


lists([12,4,15,11])

>>> 
1241511

Ответ 3

s = ""
for x in map(str, x):
    s += x

print(s)
1241511

Ответ 4

Может быть еще несколько параметров, например

Option1

>>> lst=[12,4,15,11]
>>> str(lst).translate(None, '[,] ')
'1241511'

Вариант 2

>>> join = lambda e: str(e[0]) + join(e[1:]) if e else ""
>>> join(lst)
'1241511'

Вариант 3

>>> ("{}"*len(lst)).format(*lst)
'1241511'

Вариант 4

>>> reduce(lambda a,b:a+b,map(str,lst))
'1241511'

Ответ 5

числовое решение, используя ваш код

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])

Ответ 6

Вы можете попробовать 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])

Ответ 7

Здесь полностью численное решение, отвлекающее ваше понятие от востребования с полномочиями 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, как было запрошено.

Все, что я делаю здесь, перебирает список в обратном порядке и отслеживает, сколько цифр слева мне нужно сдвинуть каждое значение. Это позволяет целые числа с произвольным числом цифр.

Ответ 8

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'