如何去掉Python中列表里的列表?
def digit_sum(n):
n = str(n)
empty = [x.split() for x in n]
print empty
digit_sum(21)
这段代码的输出结果是:
[['2'], ['1']]
我需要的是这样的结果:
[2, 1]
这样我就可以把列表中的数字加在一起。请问我该怎么做呢?
6 个回答
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这时候,我们可以去一些技术论坛,比如StackOverflow,寻求帮助。在这些论坛上,很多人会分享他们的经验和解决方案,帮助其他人解决类似的问题。
当你在这些论坛上提问时,记得把你的问题描述清楚,包括你遇到的错误信息、你使用的代码,以及你希望实现的目标。这样,其他人才能更好地理解你的问题,并给出有效的建议。
同时,看到别人提问时,我们也可以学习到很多知识,了解不同的解决方法和编程技巧。这种互相帮助的氛围,让编程变得更加有趣和容易。
总之,技术论坛是一个很好的资源,能帮助我们解决问题,提升自己的编程能力。
>>> from itertools import chain
>>> x = [['2'], ['1']]
>>> map(int, chain(*x))
[2, 1]
这个可以运行:
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)
则是把这个字符转换成整数。
如果你想把一个列表里的列表完全展平,你需要检查它是否可以被迭代。
为此,你可以创建一个生成器,它会返回一个不可迭代的项目,或者如果这个项目是可迭代的,就递归地调用自己。
然后把生成器中的每个元素放到一个列表里,并打印出来。
警告!!
如果你有循环引用的列表,比如 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)]
不要使用 split
方法。这个方法是用来把字符串按照空格分开的(默认情况下)。它总是会返回一个字符串列表(即使没有可以分开的地方)。
因为你的循环是针对一个字符串的,所以 x
只会是一个单独的字符。这意味着你永远不会有空格可以分割。
你可以直接使用 [x for x in n]
或者 list(n)
来处理。
如果你想把数字作为整数而不是字符串来处理,可以用 [int(x) for x in n]
或者 map(int, n)
。
我会这样做(你不需要用.split
,只需把它转换成一个可以逐个处理的字符串):
def digit_sum(n):
empty = [int(d) for d in str(n)]
print empty
示例:
>>> digit_sum(21)
[2, 1]
然后你可以用sum()
函数把它们加在一起。