def digit_sum(n):
n = str(n)
empty = [x.split() for x in n]
print empty
digit_sum(21)
此代码将输出:
[['2'], ['1']]
我需要做的是:
[2, 1]
所以我可以一起添加列表中的数字。我该怎么做?
答案 0 :(得分:3)
我会这样做(你不需要.split
它,只需将它转换为你可以迭代的字符串):
def digit_sum(n):
empty = [int(d) for d in str(n)]
print empty
演示:
>>> digit_sum(21)
[2, 1]
然后,您可以使用sum()
函数将它们加在一起。
答案 1 :(得分:2)
请勿致电split
。 Split尝试在空格上划分字符串(默认情况下)。它将始终返回一个字符串列表(即使没有要进行拆分)。
由于你的循环遍及字符串,x
将是一个字符。这意味着你永远不会有任何空白分裂。
只需[x for x in n]
或list(n)
。
或者,如果您希望数字为整数,而不是字符串:[int(x) for x in n]
或map(int, n)
答案 2 :(得分:0)
我相信如果你
firstlist.append(secondlist)
Python应该打印1,2。从Windows Phone发帖,所以我无法运行代码,请原谅我的无能,如果这不起作用。
答案 3 :(得分:0)
这有效:
def digit_sum(n):
n = str(n)
empty = [int(x) for x in n]
print empty
digit_sum(21)
输出:
[2,1]
split
返回一个列表。 for x in n
将遍历字符串中的每个字符,int(x)
将字符转换为整数。
答案 4 :(得分:0)
>>> from itertools import chain
>>> x = [['2'], ['1']]
>>> map(int, chain(*x))
[2, 1]
答案 5 :(得分:0)
如果要完全展平列表列表,则需要检查其是否可迭代。
要执行此操作,您可以创建一个返回不可迭代项的生成器,或者如果该项是可迭代的,则递归调用自身。
然后将生成器的每个元素放在一个列表中,并打印出来。
这会在循环列表中崩溃,即l = []; l.append(l)
def get_single_elements(item):
if hasattr(item, '__iter__'):
for child_item in item:
for element in get_single_elements(child_item):
yield element
else:
yield item
def print_flat(item):
print [element for element in get_single_elements(item)]
>>> print_flat([[[0],[1]]])
[0, 1]
>>> print_flat([[[[[0,[1,2,[3,4]]]]],[[1]]]])
[0, 1, 2, 3, 4, 1]
修改,如果您确定要将所有商品转换为整数,请将其写为
def print_flat(item):
print [int(element) for element in get_single_elements(item)]