我需要加入列表中的元素而不使用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
,这显然是错误的。
我认为逻辑是可以的,但我找不到问题?
答案 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)
可以有更多选项,例如
>>> 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'
答案 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
一样尝试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])
答案 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'