2

他のリストを含む 1 つのリストがあり、他のリストの n 番目のアイテムのみから新しいリストを作成したいと考えています。

my_list = [[1,2,3],['a','b','b'],[100,200,300]]

new_list = make_new_list(mylist, index=2)

new_list = [2,'b',200]

私はすべての 2 番目の要素を取得する関数を設計する方法を知っていますが、これをはるかにスムーズに行う Pythonic リスト内包表記が常に存在することも知っています。リスト内包表記とは?

4

3 に答える 3

5

それはとても簡単です:

new_list = [x[1] for x in my_list]

Python では、インデックスは 0 から始まるため、2 番目の要素のインデックスは 1 であることに注意してください。

于 2013-05-06T21:18:27.073 に答える
0

リスト内包表記を使用するか、Python の map 関数を使用できます。

my_list = [[1,2,3],['a','b','b'],[100,200,300]]
newlist = map(lambda x: x[1], my_list)

それを行う関数が必要な場合:

my_func = lambda li, index: map(lambda x: x[index], li)
newlist = my_func(my_list, 1)
于 2013-05-06T21:24:36.370 に答える
0

mgilson によって提案されたリスト内包表記を使用するバージョンとは別に、次を使用することもできますoperator.itemgetter

>>> from operator import itemgetter
>>> map(itemgetter(1), my_list)
[2, 'b', 200]

いくつかのタイミング比較:

>>> lis = [[1,2,3],['a','b','b'],[100,200,300]]*10**5

>>> %timeit [x[1] for x in lis]
10 loops, best of 3: 38.6 ms per loop

>>> %timeit map(itemgetter(1),lis)
10 loops, best of 3: 43.8 ms per loop

>>> %timeit map(lambda x: x[1], lis)
10 loops, best of 3: 82.9 ms per loop
于 2013-05-06T21:22:40.740 に答える