2012-03-26 3 views
-1

可能性の重複に2次元のリストを変更する:
Flattening a shallow list in Python1次元

私は2次元のリストを取り、それを1次元のリストを出力する関数を作成したいです内容ここ は、私が持っているものです。

twoDlist= [[23, 34, 67],[44,5,3],[7,8,9]]

def twoone (list1):

for x in range (len(list1)): 
    for y in range(len(list1)): 
     list2=[] 
     list2.append(list1[x][y]) 

print twoone(twoDlist)

唯一の問題は、それが 'なし' を返します。私はここで間違って何をしていますか?誰かがより良いアイデアを提案できますか?

答えて

1

ここで2つの問題は、最初に値を返さないということです.2番目はlist2をネストしたループ内の空のリストにリセットしているため、最後に1つの要素しかありません。

def twoone(list1): 
    list2 = [] 
    for x in range(len(list1)): 
     for y in range(len(list1)): 
      list2.append(list1[x][y]) 
    return list2 

>>> twoone(twoDlist) 
[23, 34, 67, 44, 5, 3, 7, 8, 9] 

は、しかし、これを行うjtbandes'はコメント内のリンクを参照するにははるかに良い方法があります:ここでは

はあなたのコードを修正することができる方法です。

最良の方法はitertools.chain()です:

>>> from itertools import chain 
>>> list(chain.from_iterable(twoDlist)) 
[23, 34, 67, 44, 5, 3, 7, 8, 9] 
+0

ああ、助けてくれてありがとう。 – bahaaz

0

すべての繰り返しでlist2を[]として再初期化するという理由があります。 forループの外側のlist2部分を2つで初期化してみてください。

+0

まだ「なし」を返します – bahaaz

+0

私の悪い、あなたはまた、最後にリストを返す必要があります。 –

1

あなたの方法は、Noneを返す理由は、それがreturn声明を持っていないということです。ただし、returnステートメントであっても、結果は正しくありません。他の答えが指摘しているように、list2をループの外で初期化して(そしてlist2を返す)問題を解決します。

ネストされたリストの理解を使用して、タスクをよりコンパクトに行うこともできます。

def twoone(list1): 
    return [val for lst in list1 for val in lst] 
+0

パラメータ 'list1'を取るが、' lst'を使う。 –

関連する問題