2016-09-30 5 views
-1
s = """ 
1:A,B,C,D;E,F 
2:G,H;J,K 
&:L,M,N 
""" 

def read_nodes(gfile): 
    for line in gfile.split(): 
     nodes = line.split(":")[1].replace(';',',').split(',') 
     for node in nodes: 
      print node 

print read_nodes(s) 

['A','B','C','D','E',.....'N']と期待されていますが、A B C D E .....Nと表示されています。私はデバッグに多くの時間を費やしましたが、正しい方法を見つけることができませんでした。リストを作成しても文字列を取得できますか?

+1

ループのことで印刷を交換してください"print nodes'で –

+0

@MosesKoledoyeまだ動作していません... hmmm – Rya

答えて

0

lineを読むと、ノードという新しいリストが作成されます。このループの外にリストを作成し、すべてのノードを格納する必要があります。

s = """ 
1:A,B,C,D;E,F 
2:G,H;J,K 
&:L,M,N 
""" 

def read_nodes(gfile): 

    allNodes = [] 
    for line in gfile.split(): 
     nodes =line.split(":")[1].replace(';',',').split(',') 

     for node in nodes: 
      allNodes.append(node) 

    return allNodes 

print read_nodes(s) 
+1

"関数から返される値が最後のプリントの戻り値だからです。 "それはどういう意味ですか?戻り値がまったくないので 'None'を返します。 Pythonには魔法のauto-return-last-expressionがありません。 – L3viathan

+1

ああ、最近、あまりにも多くのルビーを使っているかもしれない。私はそれを間違って編集します。 – LucasP

0

あなたが最終的に達成しようとしているものは非常にわからないが、これはあなたが期待していると言うものを出力します:

s = """ 
1:A,B,C,D;E,F 
2:G,H;J,K 
&:L,M,N 
""" 

def read_nodes(gfile): 
    nodes = [] 
    for line in gfile.split(): 
     nodes += line.split(":")[1].replace(';',',').split(',') 
    return nodes 

print read_nodes(s) 
0

を出力 [「A」となるように、次のコードを追加し、 「B」「C」「D」「E」「F」「G」「H」「J」「K」「L」「M」「N」]

//Code to be added 
nodes_list = [] 

def read_nodes(gfile): 

    for line in gfile.split(): 
     nodes =line.split(":")[1].replace(';',',').split(',') 
     nodes_list.extend(nodes) 
    print nodes_list 

print read_nodes(s) 
+0

今インデントされています:) – anilkumarnandamuri

1

私はこれがあなたが探していると信じています:

s = """ 
1:A,B,C,D;E,F 
2:G,H;J,K 
&:L,M,N 
""" 

def read_nodes(gfile): 
    nodes = [line.split(":")[1].replace(';',',').split(',') for line in gfile.split()] 
    nodes = [n for l in nodes for n in l] 
    return nodes 

print read_nodes(s) # prints: ['A','B','C','D','E',.....'N'] 

あなたが作成した各サブリストに対して、そのサブリストを反復して内容を印刷していたのは間違っていました。

上記のコードでは、リストの理解度を使用して、最初にgfileを繰り返し、リストのリストを作成します。リストは2行目で平坦化されます。その後、フラット化されたリストが返されます。

あなたはまだそれをあなたの方法をしたい場合は、次にあなたが各サブリストの内容を格納し、その変数を返すために、ローカル変数を必要とする:

s = """ 
1:A,B,C,D;E,F 
2:G,H;J,K 
&:L,M,N 
""" 

def read_nodes(gfile): 
    all_nodes = [] 
    for line in gfile.split(): 
     nodes = line.split(":")[1].replace(';',',').split(',') 
     all_nodes.extend(nodes) 
    return all_nodes 

print read_nodes(s) 
+1

私はこれについて考えていないことに驚いています。ローカル変数を作成してその変数を返さずに、リストの理解を使って考えてみてください。 – Mangohero1

+0

@DrewDavisありがとう。私は誰かがfor-loopを使っているのを見たら、最初にやろうとしていることは、同等のリストの理解ができるかどうかを見ることです。 –

関連する問題