4

チュートリアルを進めていて、gensimわからないことがありました。texts文字列のネストされたリストです:

In [37]: texts
Out[37]:
[['human', 'machine', 'interface', 'lab', 'abc', 'computer', 'applications'],
 ['survey', 'user', 'opinion', 'computer', 'system', 'response', 'time'],
 ['eps', 'user', 'interface', 'management', 'system'],
 ['system', 'human', 'system', 'engineering', 'testing', 'eps'],
 ['relation', 'user', 'perceived', 'response', 'time', 'error', 'measurement'],
 ['generation', 'random', 'binary', 'unordered', 'trees'],
 ['intersection', 'graph', 'paths', 'trees'],
 ['graph', 'minors', 'iv', 'widths', 'trees', 'well', 'quasi', 'ordering'],
 ['graph', 'minors', 'survey']]

そしてsum(texts,[])与えます:

Out[38]:
['human',
 'machine',
 'interface',
 'lab',
 'abc',
 'computer',
 'applications',
 'survey',
 'user',
 'opinion',
 'computer',

リストはさらに数行続きますが、スペースを節約するために残りを省略しました。2 つの質問があります。

1) なぜsum(texts,[])その結果を生成する (つまり、ネストされたリストを平坦化する) のですか?

2) 出力が奇妙に表示されるのはなぜですか? この出力には何か特別なものがありますか (... または、iPython の動作がおかしいのではないかと思います)。こちらもご覧になりましたらご確認ください。

4

3 に答える 3

7

リストを一緒に追加するとそれらが連結されるためです。

sum([a, b, c, d, ..., z], start)

と同等です

start + a + b + c + d + ... + z

そう

sum([['one', 'two'], ['three', 'four']], [])

と同等です

[] + ['one', 'two'] + ['three', 'four']

それはあなたに与えます

['one', 'two', 'three', 'four']

startは、デフォルトではであることに注意してください。これは0、デフォルトでは数値で動作するためです。

sum([['one', 'two'], ['three', 'four']])

次に、同等のことを試みます

0 + ['one', 'two'] + ['three', 'four']

リストに整数を追加できないため、失敗します。


1 行に 1 つずつということは、IPython が文字列の長いリストを出力することを決定する方法です。

于 2013-10-18T15:35:30.570 に答える
3

まず、ipython を使用しているため、そのように表示されています。

次に、 をどのsumように定義できるかを考えます。関数型プログラミングに精通していますか?

自分で定義する場合は、次のように記述します。

def sum(lst, start):
    if len(lst) == 1:
        return lst[0] + start
    else:
        return lst[0] + sum(lst[1:], start)

リストのリストでこれを実行することは、次のように言うのと同じです

[['a','b'] + ['c','d'] + []] # for example

その結果:

['a','b','c','d']

つまり、リストを平坦化します。

于 2013-10-18T15:35:46.250 に答える
0

リストに対しても追加 (およびその他の操作) を実行できるため、基本的にリストを追加して 1 つの巨大なリストを作成します。

['a'] + ['b'] = ['a','b']
于 2013-10-18T15:36:38.023 に答える