3

さて、私はこの例を持っています:

mylist = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]

リストの一覧です。各サブリストの最初の 5 ポイントを保持したい。それが単純なリストだったら、私は電話mylist[:5]をかけて、それだけです。さて、私が想像できる最も簡単な方法は、mylist を繰り返し処理し、各サブリストの最初の 5 つのポイントを新しいリストにコピーすることです。

newlist = []
for i in mylist:
    newlist.append(i[:5])

しかし、リストの長さが 10.000 以上の場合はどうなるでしょうか。もっと速い方法を知っていますか?

4

4 に答える 4

9

まあ、リスト内包表記を使用して同じことを行うことができるので、少なくとも少し短くなります。

return [x[:5] for x in mylist]

または、代わりに関数をジェネレーターにする場合は、個々の要素を生成することもできます。

for x in mylist:
    yield x[:5]
于 2013-10-06T21:44:39.973 に答える
0

プロセスをスケーリングしようとしている場合は、おそらく内部リストにもジェネレーターを使用する必要があります。

g = lambda k: (k[i] for i in range(5))
for x in mylist:
    yield g(x)
于 2013-10-06T21:57:02.797 に答える
0

それを達成する別の方法:

return map(lambda lst: lst[:5], mylist)
于 2013-10-06T21:55:18.210 に答える