2016-05-12 7 views
1

ネストされたリストを反復処理して、要素をいくつか変更しようとしています。それらを変更した後、結果を同じネストされたリストに保存したいと思います。 は例えば、私が若干変更要素をリストのリストを取得したいPythonでネストされたリストを操作する

text = [['I', 'have', 'a', 'cat'], ['this', 'cat', 'is', 'black'], ['such', 'a', 'nice', 'cat']] 

を持っています。例:

まず、各リストを調べてから、リスト内の各項目を調べて、必要な変更を加えるための追加コードを適用します。しかし、操作後にネストされたリストを戻す方法はありますか?これは私が何をすべきかです:

for tx in text: 
    for t in tx: 
     #making some operations with each element in the nested list. 
     #using if-statements here 
    result.append() 

をそして私は

result = ['I_S', 'have', 'a_A', 'cat', 'this', 'cat_S', 'is', 'black_A', 'such', 'a', 'nice', 'cat_S'] 

が、私はそれが実際に文章をだから、ネストされたリストを保持する必要があるネストされたリストから、変更されたすべての要素を持つ単一のリストを持っているものテキストから。あなたはこのコードをコピー&ペーストした場合、resulttextに等しくなります

result = [] 
for i in range(len(text)): 
    temp = [] 
    for t in text[i]: 
     word_modified = t 
     #making some operations with each element in the nested list. 
     #using if-statements here 
     temp.append(word_modified) 
    result.append(temp) 
result 

:これを試して出力としてネストされたリストを作成するには

+0

あなたが求めているものをクリアする - 元のリストのリストを保持し、新しい、変更されたコピーを返すか? –

+0

実際に問題を再現するのに十分なコードを含めることができますか? – khelwood

+0

申し訳ありませんが、私はlist-of-listを変更したいと思います。 –

答えて

3

。しかし、ループtが各単語を別々に表しているので、あなたは望む通りにそれを変更することができます。

0
[[item + change if needchange else item for item in lst ] for lst in test ] 

または

def unc(item): 
    #do something 
    return res 
[[func(item) for item in lst ] for lst in test ] 
1

あなたのコードが読みやすくするために、あなたは結果のリストを作成し、適切なテキストに余分な文字列を追加する機能を定義するには、ネストされたリストの内包表記を使用することができます。あなたが機能

result_text = [[word_processor(word) for word in word_cluster] for word_cluster in text] 

の形式は次のようになります。

def word_processor(word): 
    # use word lengths to determine which word gets extended 
    if len(word) > 1 and isintance(word, str): 
      return word + "_S" 
    else: 
      # Do nothing 
      return word 

機能厳密にあなたが達成しようとしているかに依存します。

+1

テキストの説明のビットは、答えを探している他のユーザーとは遠く離れています。 –

+0

@LaurIvanありがとうございます。私は説明のいくつかの行を追加しました –

0

変更した結果を同じ元のリストに入れ子状に保持することは可能です。これには1行のコードが有効です。

あなたは、単に試すことができます。

テキスト= [[ 'I' は、 'は'、 ''、 '猫']、[ 'この'、 '猫'、 'で'、 '黒' ]、[ 'など'、 ''、 '素敵な'、 '猫']]

map(lambda x:map(function,x),text) 

など、あなたの要件ごとに書くことができ、この関数の定義:それは100ではありません

def function(word): 
    #modification/Operations on Word 
    return word 
関連する問題