2

NLTK ツリーから抽出したこのような値があります。


[[('Happy', 'NNP'), ('Mother', 'NNP')], [('Day', 'NNP')], [('Joey', 'NNP'), ('M.', 'NNP'), ('Bing', 'NNP')], [('kind', 'NN')], [('happy', 'JJ'), ('wife', 'NN')], [('mother', 'NN')], [('friend', 'NN')]]


私は最終結果が

['Happy Mother','Day','Joey M. Bing','kind','happy wife','mother','friend']

これをpythonの方法で行うにはどうすればよいですか?

これは私がこれまで行ってきたことであり、非常に醜いことです。私はパイソン処女です。


Y = []
for x in X:
    s = ""
    for z in x:
        s += z[0] + " "
    Y.append(s)

print Y

4

3 に答える 3

4

zipと を使用すると、非常に簡単に実行できますstr.join

result = [' '.join(zip(*row)[0]) for row in data]

zip(*sequences)[i]各シーケンス (リスト、タプルなど) から i 番目の値を取得するための一般的な Python イディオムです。

に似て[seq[i] for seq in sequences]いますが、シーケンスが添字可能でない場合 (イテレータなど) でも機能します。Cpython では、ビルトインを使用しているため、わずかに高速になる場合があります (ただし、重要な場合は常にプロファイルを作成する必要があります)。また、リストの代わりにタプルを返します。

詳細については、ドキュメントを参照してください。

于 2013-03-12T23:06:00.550 に答える
3
Y = [' '.join(t[0] for t in l) for l in X]
于 2013-03-12T23:06:23.723 に答える
1

リスト内包表記を使用します。

>>> X = [[('Happy', 'NNP'), ('Mother', 'NNP')], [('Day', 'NNP')], [('Joey', 'NNP'), ('M.', 'NNP'), ('Bing', 'NNP')], [('kind', 'NN')], [('happy', 'JJ'), ('wife', 'NN')], [('mother', 'NN')], [('friend', 'NN')]]
>>> Y = [' '.join(z[0] for z in x) for x in X]
>>> Y
['Happy Mother', 'Day', 'Joey M. Bing', 'kind', 'happy wife', 'mother', 'friend']
于 2013-03-12T23:05:42.247 に答える