如何摆脱python中列表中的列表?

时间:2014-04-11 20:58:19

标签: python list

    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 :(得分: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)]