2009-12-16 111 views
0

說我有幾個列表,如果整型:Python:列表以輸入單個數字?

x = [['48', '5', '0'], ['77', '56', '0'], 
['23', '76', '34', '0']] 

我想這個名單被轉換爲單數,但單一的號碼類型仍然是一個整數,即:

4850775602376340 

我已使用此代碼來執行此過程:

num = int(''.join(map(str,x))) 

但我不斷收到一個值錯誤。

此外,如果我的列表包含負整數,我會如何將它們轉換爲絕對值?然後將它們轉換爲單個數字?

X2 = [[ '48', '5', '0'],[ '77', '56', '0'], [ '23', '76',' -34' , '0']]

X2 = 4850775602376340和

預先感謝。

回答

2

其列表的列表,所以

num = int(''.join(''.join(l) for l in lists)) 

def flatten(nested): 
    for inner in nested: 
     for x in inner: 
      yield x 

num = ''.join(flatten(lists)) 
+0

你能解釋一下這個答案嗎?我不明白這意味着什麼。 – 2016-06-03 00:14:57

1
>>> x = [['48', '5', '0'], ['77', '56', '0'], ['23', '76', '34', '0']] 
>>> int(''.join([''.join(i) for i in x ])) 
4850775602376340 
+0

而把它變成一個實際的int,把'int()'調用包圍它。 – Amber 2009-12-16 14:16:59

6
>>> int(''.join(reduce(lambda a, b: a + b, x))) 
4850775602376340 
+0

非常感謝! – harpalss 2009-12-16 14:28:21

+0

只是另一個快速的問題,如果我不能提供和整數如何提高和錯誤? – harpalss 2009-12-16 14:44:03

+0

@harpalss:你可以循環遍歷項目並檢查類型(i)== int如果你想確保 – Mizipzor 2009-12-16 14:46:18

3
>>> int(''.join(j for i in x for j in i)) 
4850775602376340 
6

我會使用itertools.chain.from_iterable這(新的Python 2.6)

示例代碼:

import itertools 
x = [['48', '5', '0'], ['77', '56', '0'], ['23', '76', '34', '0']] 
print int(''.join(itertools.chain.from_iterable(x))) 
1

足夠好的答案已經......只是想增添無限嵌套的治療:

def flatten(obj): 
    if not isinstance(obj, list): 
     return obj 
    else: 
     return ''.join([flatten(x) for x in obj]) 

>>> x = [['48', '5', '0'], ['77', '56', '0'], ['23', '76', '34', '0']] 
>>> flatten(x) 
'4850775602376340' 

>>> x = [['48', '5', '0'], ['77', '56', '0'], [['23','123'], '76', '34', '0']] 
>>> flatten(x) 
'4850775602312376340' 
+0

遞歸總是很好;) – 2009-12-16 15:57:59

1

簡單地說:

  1. 平整列表

    [e for e in (itertools.chain(*x))] 
    
  2. 去除負號

    e.replace('-','') 
    
  3. 在列表中加入數字轉換成字符串,並把它變成了一些

    int(''.join(x)) 
    

把他們放在一起

x2 = int(''.join([e.replace('-','') for e in (itertools.chain(*x))]))