在没有join命令的情况下连接列表中的元素

时间:2015-04-21 02:25:20

标签: python list join

我需要加入列表中的元素而不使用join命令,所以如果我有列表:

[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,这显然是错误的。

我认为逻辑是可以的,但我找不到问题?

8 个答案:

答案 0 :(得分:13)

如果您只想打印数字而不是return实际int

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

答案 1 :(得分:3)

您可以将每个元素转换为string,添加它们,然后转换回int

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


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

>>> 
1241511

答案 2 :(得分:3)

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

print(s)
1241511

答案 3 :(得分:3)

可以有更多选项,例如

选项1

>>> 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'

答案 4 :(得分:1)

使用您的代码

的数字解决方案
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])

答案 5 :(得分:1)

您可以像map一样尝试reducelambda

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

答案 6 :(得分:1)

这是一个完全数字化的解决方案,可以解读你对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

我在这里所做的就是以相反的顺序循环遍历列表并跟踪我需要移动每个值的左边有多少位数。这允许具有任意位数的整数。

答案 7 :(得分:-1)

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'