簡體   English   中英

如何擺脫在python列表中包含列表的問題?

[英]How can I get rid of having lists inside of a list in python?

    def digit_sum(n):
        n = str(n)
        empty = [x.split() for x in n]
        print empty



    digit_sum(21)

此代碼將輸出:

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

我需要做的是:

    [2, 1] 

因此我可以將列表中的數字加在一起。 我怎么做?

我會做的(您不需要將它.split 。只需將其轉換為可以迭代的字符串即可):

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

演示:

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

然后,您顯然可以將它們與sum()函數一起添加。

不要叫split Split嘗試在空格上分割字符串(默認情況下)。 它將始終返回一個字符串列表(即使沒有拆分也是如此)。

由於循環在字符串上,因此x將是單個字符。 這意味着您永遠不會有任何空白。

只需執行[x for x in n]list(n)

或者,如果您希望數字不是整數,而是整數: [int(x) for x in n]map(int, n)

我相信如果你

firstlist.append(secondlist)

Python應該打印1、2。從Windows Phone發布,所以我不能運行代碼,如果這樣做不對不起,請原諒。

這有效:

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)將字符轉換為整數。

>>> from itertools import chain
>>> x = [['2'], ['1']]
>>> map(int, chain(*x))
[2, 1]

如果要完全平整列表列表,則需要檢查其是否可迭代。

為此,您可以創建一個生成器,該生成器返回一個不可迭代的項目,如果該項目是可迭代的,則可以遞歸調用自身。

然后將生成器的每個元素放在列表中,並進行打印。

警告!!

這將導致循環列表崩潰,即l = []; l.append(l) 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)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM