2017-06-10 8 views
-2

コミュニティ2つのサブリストに参加する

テキストファイルから抽出した2つのサブリストを追加するのに苦労しています。コードは "print(p、t)"までOKでなければなりませんが、その後のappendコマンドは機能しません(output.extend([p、t])も試みました)。 p =代名詞(testpersonsが発声したもの) t = testpersons(VP +数字で短縮) 代名詞を取得するだけでなく、現在のコードでも行を生成することができます残念ながら動作しません。 私は同じコードで私の同僚workigが取得しないインデントエラーを取得します。

ありがとうございました!

import re 

    with open (r'./Transliteration_Task1_DE.txt', 'r')as file: 

     pro=["ich", "mir", "mich", "wir", "uns", "du", "dir", "dich"] 
     t="" #variable for testpersons 
     output=list() 
     for line in file: 
      words=list() 
      words=line.split(" ") 
      #print(words) 
      if re.match(r'.*VP.*', line): 
       t=line 
       words=line.split(" ") 
       #print(words) 
      for w in words: 
       #print(w) 
       for p in pro: 
        if p == w: 
         print(p, t) 
         output.append([p,t]) 
     for o in output: 
      print(output) #output should be a list with sublists (testpersons and pronouns) 
+0

インデントエラーは、多くの場合、タブ/スペースが混在しています。どのテキストエディタを使用していますか? あなたは実際には1つのループのみを行う必要があります。単語の中でwのために変更することができます:p in proの場合:p == w: 'のようなものに'のように 'wの場合は:プロの場合: –

+2

あなたが期待しているものの例 –

+0

@Kind Strangerありがとう!私はメモ帳++を使用しています。参加者、プロが発生している行を出力したいと思います。例えば。 VP1、 "Ich lege die Banane"; – user3429227

答えて

2

あなたのコードを簡略化することができます。

pronouns = ["ich", "mir", "mich", "wir", "uns", "du", "dir", "dich"] 
output = [] 

with open (r'./Transliteration_Task1_DE.txt', 'r') as file: 
    for line_number, line in enumerate(file): 
     words = line.split() # Split the line on whitespaces such that words contains a list of words from the line. 

     if "VP" in line: # Only do something if the line contains "VP" - you don't need a regular expression. 
      for pronoun in pronouns: # Search all pronouns 
       if pronoun in words: # If the pronoun is in the list of words, append it to the output 
        print(pronoun, line_number, line) 
        output.append([pronoun, line_number, line]) 

for o in output: 
    print(o) 

は、行番号を取得するには、次のことができちょうどenumerateファイルハンドル。

この行に文字列VPが含まれているかどうかを確認するには、in演算子を使用するともっとpythonicな方法があります。

2番目のネストされたforループの場合も同様です。inを使用して、代名詞が単語リストに含まれているかどうかを確認してください。

さらに、読みやすい変数名を与えるのに役立ちます。 1文字の名前はしばしば混乱し、読みにくいものです。

また、入力行には、大文字/小文字の組み合わせを削除する必要がある句読点が含まれることがあります。大文字小文字を区別しない場合は、すべての単語を小文字にする必要があります(lower関数のstrを参照)。

1

それはあなたが何をしたいのかである場合は、+演算子を使用して二つのリストに参加することができます

>>> [*p, *q] 
[0, 1, 2, 3] 
:要素を展開する *(アスタリスク)単項演算子を使用して

>>> p = [0, 1] 
>>> q = [2, 3] 
>>> p + q 
[0, 1, 2, 3] 

そして.extend()リストメソッドを使用して:

>>> p.extend(q) 
>>> print(p) 
[0, 1, 2, 3] 
関連する問題