2017-10-18 10 views
-1

は、私は次のリストを持っている想像:を連結リスト要素

>>> mylist 

[('a', u'DT'), 
('Satisfactory', u'JJ'), 
('tracing', u'VBG'), 
('with', u'IN'), 
('a', u'DT'), 
('fairly', u'RB'), 
('persistent', u'JJ'), 
('with', u'IN')] 

にはどうすればu'IN'が含まれている要素またはu'DT'間に収まるリスト項目を連結し、唯一の連結要素、すなわちを返しません:

[('Satisfactory tracing'), 
('fairly persistent')] 
+0

@engr_s結果の2番目の要素です。 '(かなり永続的です)' – Barmar

+0

itertools.dropwhile()とitertools.takewhile()を試してみてください。 –

答えて

1

これはあなたに望ましい結果をもたらすものです。おそらくそれを少し最適化する必要があります。

my_list = ([('a', u'DT'), 
      ('Satisfactory', u'JJ'), 
      ('tracing', u'VBG'), 
      ('with', u'IN'), 
      ('a', u'DT'), 
      ('fairly', u'RB'), 
      ('persistent', u'JJ'), 
      ('with', u'IN')]) 

sequence_enable = False 
new_list = [] 
for i in my_list: 
    if i[1] == 'DT' or i[1] == 'IN': 
     if not sequence_enable: # Start reading values 
      sequence_enable = True 
      temp_str = [] 
     else: # stop reading values 
      new_list.append(' '.join(temp_str)) 
      sequence_enable = False 

     continue 
    else: # store values 
     if sequence_enable: 
      temp_str.append(i[0]) 

print(new_list) 
# output: ['Satisfactory tracing', 'fairly persistent'] 
+0

fantastic - 私にとってはうってつけで、新しい分割タグで簡単に追加できます。ありがとう。これはありがとうございます。 – brucezepplin

0

ここではいくつかの擬似コードと実際のコードです:

while elements remain in mylist: 
    # Find the next "DT" element 
    look at next element 
    while element[1] is not "DT": 
     look at next element 

    # Watch for "IN"; concatenate elements in the meantime. 
    result = [] 
    look at next element 
    while element[1] is not "IN": 
     result.append(element[0]) 

    # result is a list of the words you want 
    result_conc = ' '.join(result) 

あなたは動いていますか?

1

これは、1つの解決策である:それは最初mylistu'DT'u'IN'のインデックスを見つける

idt = [item for item in range(len(mylist)) if mylist[item][1] == u'DT'] 
jdt = [item for item in range(len(mylist)) if mylist[item][1] == u'IN'] 

ij = zip(idt,jdt) 

temp_list = [mylist[i[0]+1:i[1]] for i in ij] 

new_list = [str(elem[0][0]+ ' ' + elem[1][0]) for elem in temp_list] 

、それはタプル、ijのリストにそれらを一緒にジッパー。各タプルは、プログラムが値を抽出するはずの区間の始まりと終わりです。値は、最初にmylistに表示されるように抽出され、temp_listに抽出されます。最後のステップは、に格納された抽出値を結合して処理するターゲットnew_listを形成します。

このソリューションはあなたにカッコ()内の値を与えるものではありません - それは、これを達成するためのようだ、new_listの要素は、タプルになってなければならないのいずれか、すなわち('Satisfactory tracing',)またはブラケットは、文字列'(Satisfactory tracing)'の一部でなければならないであろう。

編集 - DTINの間の文字列の任意の数の液 - new_listが同じになるまですべて、new_listtemp_listのサブリスト内の各要素からの第1の要素を抽出し、1つの文字列にそれらを接合することによって形成される、

new_list = [((' ').join(map(lambda x: x[0], sub_el))) for sub_el in temp_list] 

mylist = [('a', u'DT'), ('Satisfactory', u'JJ'), ('Satisfactory', u'JJ'), 
('tracing', u'VBG'),('with', u'IN'),('a', u'DT'),('fairly', u'RB'), 
('persistent', u'JJ'),('with', u'IN'), ('a', u'DT'),('persistent', u'JJ'), 
('with', u'IN')] 

利回り

とテスト0
['Satisfactory Satisfactory tracing', 'fairly persistent', 'persistent'] 
+0

new_listを作成する最後のコマンドは、リストのインデックスが範囲外であることを告げるものです。これは 'temp_list'には空の要素がほとんど含まれているからです。私は 'temp_list'が' mylist'から要素asisを拾うことを望んでいたのを見ることができますが、これは起こっておらず、これはエラーを引き起こすと思います。 – brucezepplin

+0

喜んで助けてください。私には間違いはありませんでした。これは皆さんが提供した正確な例で確認されました。エラーの原因となる例を投稿できますか?また、 'temp_list'は空ではありません。 – atru

+0

これは、 'DT'と' IN'の間に2つの要素がある場合にのみ有効です。 – atru

関連する問題