如何去掉Python中列表里的列表?

1 投票
6 回答
5463 浏览
提问于 2025-04-18 02:25
    def digit_sum(n):
        n = str(n)
        empty = [x.split() for x in n]
        print empty



    digit_sum(21)

这段代码的输出结果是:

     [['2'], ['1']]

我需要的是这样的结果:

    [2, 1] 

这样我就可以把列表中的数字加在一起。请问我该怎么做呢?

6 个回答

0

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这时候,我们可以去一些技术论坛,比如StackOverflow,寻求帮助。在这些论坛上,很多人会分享他们的经验和解决方案,帮助其他人解决类似的问题。

当你在这些论坛上提问时,记得把你的问题描述清楚,包括你遇到的错误信息、你使用的代码,以及你希望实现的目标。这样,其他人才能更好地理解你的问题,并给出有效的建议。

同时,看到别人提问时,我们也可以学习到很多知识,了解不同的解决方法和编程技巧。这种互相帮助的氛围,让编程变得更加有趣和容易。

总之,技术论坛是一个很好的资源,能帮助我们解决问题,提升自己的编程能力。

>>> from itertools import chain
>>> x = [['2'], ['1']]
>>> map(int, chain(*x))
[2, 1]
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) 则是把这个字符转换成整数。

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

不要使用 split 方法。这个方法是用来把字符串按照空格分开的(默认情况下)。它总是会返回一个字符串列表(即使没有可以分开的地方)。

因为你的循环是针对一个字符串的,所以 x 只会是一个单独的字符。这意味着你永远不会有空格可以分割。

你可以直接使用 [x for x in n] 或者 list(n) 来处理。

如果你想把数字作为整数而不是字符串来处理,可以用 [int(x) for x in n] 或者 map(int, n)

3

我会这样做(你不需要用.split,只需把它转换成一个可以逐个处理的字符串):

def digit_sum(n):
    empty = [int(d) for d in str(n)]
    print empty

示例:

>>> digit_sum(21)
[2, 1]

然后你可以用sum()函数把它们加在一起。

撰写回答