416

リスト内包表記を使用してイテラブルのリストをフラット化する簡単な方法はありますか、またはそれが失敗した場合、パフォーマンスと読みやすさのバランスを取りながら、このような浅いリストをフラット化する最良の方法は何だと思いますか?

次のように、ネストされたリスト内包表記でそのようなリストをフラット化しようとしました。

[image for image in menuitem for menuitem in list_of_menuitems]

NameErrorでもそこの品種に困ってしまうのは、 name 'menuitem' is not defined. グーグルでスタック オーバーフローを調べたところ、reduce次のステートメントで目的の結果が得られました。

reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))

しかし、x は Djangoオブジェクトlist(x)であるため、このメソッドを呼び出す必要があるため、このメソッドはかなり判読できません。QuerySet

結論

この質問に貢献してくれたすべての人に感謝します。これが私が学んだことの要約です。また、他の人がこれらの観察に追加または修正したい場合に備えて、これをコミュニティ wiki にしています。

私の元の reduce ステートメントは冗長であり、次のように記述した方が適切です。

>>> reduce(list.__add__, (list(mi) for mi in list_of_menuitems))

これは、ネストされたリスト内包表記の正しい構文です (見事な要約dF !)。

>>> [image for mi in list_of_menuitems for image in mi]

しかし、これらの方法はどちらも を使用するほど効率的ではありませんitertools.chain:

>>> from itertools import chain
>>> list(chain(*list_of_menuitems))

@cdleary が指摘してchain.from_iterableいるように、次のように使用して * 演算子の魔法を回避する方がおそらくより良いスタイルです。

>>> chain = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]])
>>> print(list(chain))
>>> [1, 2, 3, 5, 89, 6]
4

23 に答える 23

323

データ構造のフラット化されたバージョンを反復処理するだけで、インデックス付け可能なシーケンスが必要ない場合は、itertools.chainとcompanyを検討してください。

>>> list_of_menuitems = [['image00', 'image01'], ['image10'], []]
>>> import itertools
>>> chain = itertools.chain(*list_of_menuitems)
>>> print(list(chain))
['image00', 'image01', 'image10']

QuerySet反復可能なものなら何でも機能します。これには、質問で使用しているように見えるDjangoの反復可能なものが含まれている必要があります。

編集:これはおそらくreduceと同じくらい良いでしょう。なぜなら、reduceは、拡張されているリストにアイテムをコピーするのと同じオーバーヘッドを持つからです。chain最後に実行した場合にのみ、この(同じ)オーバーヘッドが発生しますlist(chain)

メタ編集:実際には、元のリストを一時的なもので拡張するときに作成した一時的なリストを破棄するため、質問の提案されたソリューションよりもオーバーヘッドが少なくなります。

編集:JFセバスティアンが言うようitertools.chain.from_iterable、開梱は避け、*魔法を避けるためにそれを使用する必要がありますが、timeitアプリはごくわずかなパフォーマンスの違いを示しています。

于 2009-01-02T06:49:50.437 に答える
290

あなたはほとんどそれを持っています!ネストされたリスト内包表記を行う方法は、通常のforネストされたステートメントと同じ順序でステートメントを配置することforです。

したがって、この

for inner_list in outer_list:
    for item in inner_list:
        ...

に対応

[... for inner_list in outer_list for item in inner_list]

あなたが望んでいるのは

[image for menuitem in list_of_menuitems for image in menuitem]
于 2009-01-02T08:30:21.937 に答える
130

@S.Lott : timeit アプリを作成するきっかけになりました。

パーティションの数 (コンテナー リスト内のイテレーターの数) によっても異なると考えました。コメントでは、30 個のアイテムのうちのパーティションの数について言及していませんでした。このプロットは、さまざまな数のパーティションを使用して、実行ごとに 1000 個のアイテムを平坦化しています。アイテムはパーティション間で均等に分散されます。

平坦化比較

コード (Python 2.6):

#!/usr/bin/env python2.6

"""Usage: %prog item_count"""

from __future__ import print_function

import collections
import itertools
import operator
from timeit import Timer
import sys

import matplotlib.pyplot as pyplot

def itertools_flatten(iter_lst):
    return list(itertools.chain(*iter_lst))

def itertools_iterable_flatten(iter_iter):
    return list(itertools.chain.from_iterable(iter_iter))

def reduce_flatten(iter_lst):
    return reduce(operator.add, map(list, iter_lst))

def reduce_lambda_flatten(iter_lst):
    return reduce(operator.add, map(lambda x: list(x), [i for i in iter_lst]))

def comprehension_flatten(iter_lst):
    return list(item for iter_ in iter_lst for item in iter_)

METHODS = ['itertools', 'itertools_iterable', 'reduce', 'reduce_lambda',
           'comprehension']

def _time_test_assert(iter_lst):
    """Make sure all methods produce an equivalent value.
    :raise AssertionError: On any non-equivalent value."""
    callables = (globals()[method + '_flatten'] for method in METHODS)
    results = [callable(iter_lst) for callable in callables]
    if not all(result == results[0] for result in results[1:]):
        raise AssertionError

def time_test(partition_count, item_count_per_partition, test_count=10000):
    """Run flatten methods on a list of :param:`partition_count` iterables.
    Normalize results over :param:`test_count` runs.
    :return: Mapping from method to (normalized) microseconds per pass.
    """
    iter_lst = [[dict()] * item_count_per_partition] * partition_count
    print('Partition count:    ', partition_count)
    print('Items per partition:', item_count_per_partition)
    _time_test_assert(iter_lst)
    test_str = 'flatten(%r)' % iter_lst
    result_by_method = {}
    for method in METHODS:
        setup_str = 'from test import %s_flatten as flatten' % method
        t = Timer(test_str, setup_str)
        per_pass = test_count * t.timeit(number=test_count) / test_count
        print('%20s: %.2f usec/pass' % (method, per_pass))
        result_by_method[method] = per_pass
    return result_by_method

if __name__ == '__main__':
    if len(sys.argv) != 2:
        raise ValueError('Need a number of items to flatten')
    item_count = int(sys.argv[1])
    partition_counts = []
    pass_times_by_method = collections.defaultdict(list)
    for partition_count in xrange(1, item_count):
        if item_count % partition_count != 0:
            continue
        items_per_partition = item_count / partition_count
        result_by_method = time_test(partition_count, items_per_partition)
        partition_counts.append(partition_count)
        for method, result in result_by_method.iteritems():
            pass_times_by_method[method].append(result)
    for method, pass_times in pass_times_by_method.iteritems():
        pyplot.plot(partition_counts, pass_times, label=method)
    pyplot.legend()
    pyplot.title('Flattening Comparison for %d Items' % item_count)
    pyplot.xlabel('Number of Partitions')
    pyplot.ylabel('Microseconds')
    pyplot.show()

編集:コミュニティ wiki にすることにしました。

注: METHODSおそらくデコレータを使用して蓄積する必要がありますが、この方法の方が読みやすいと思います。

于 2009-01-02T23:16:43.820 に答える
53

sum(list_of_lists, [])それを平らにします。

l = [['image00', 'image01'], ['image10'], []]
print sum(l,[]) # prints ['image00', 'image01', 'image10']
于 2014-02-27T19:03:12.740 に答える
41

このソリューションは、他のソリューションの一部 (すべて?) が制限されている「リストのリスト」の深さだけでなく、任意のネストの深さで機能します。

def flatten(x):
    result = []
    for el in x:
        if hasattr(el, "__iter__") and not isinstance(el, basestring):
            result.extend(flatten(el))
        else:
            result.append(el)
    return result

任意の深さのネストを可能にするのは再帰です-もちろん、最大の再帰深さに達するまで...

于 2009-01-02T13:49:57.287 に答える
25

Python 2.6 では、次を使用しchain.from_iterable()ます。

>>> from itertools import chain
>>> list(chain.from_iterable(mi.image_set.all() for mi in h.get_image_menu()))

中間リストの作成を回避します。

于 2009-01-04T19:37:56.397 に答える
24

パフォーマンス結果。改訂。

import itertools
def itertools_flatten( aList ):
    return list( itertools.chain(*aList) )

from operator import add
def reduce_flatten1( aList ):
    return reduce(add, map(lambda x: list(x), [mi for mi in aList]))

def reduce_flatten2( aList ):
    return reduce(list.__add__, map(list, aList))

def comprehension_flatten( aList ):
    return list(y for x in aList for y in x)

30アイテムの2レベルリストを1000回フラット化しました

itertools_flatten     0.00554
comprehension_flatten 0.00815
reduce_flatten2       0.01103
reduce_flatten1       0.01404

削減は常に悪い選択です。

于 2009-01-02T12:13:08.810 に答える
8

リスト内包表記を使用した正しい解決策は次のとおりです(質問の後ろにあります)。

>>> join = lambda it: (y for x in it for y in x)
>>> list(join([[1,2],[3,4,5],[]]))
[1, 2, 3, 4, 5]

あなたの場合は

[image for menuitem in list_of_menuitems for image in menuitem.image_set.all()]

またはあなたは使用joinして言うことができます

join(menuitem.image_set.all() for menuitem in list_of_menuitems)

forどちらの場合も、落とし穴はループのネストでした。

于 2009-01-02T07:33:49.680 に答える
8

私の頭の上から、ラムダを取り除くことができます:

reduce(list.__add__, map(list, [mi.image_set.all() for mi in list_of_menuitems]))

または、すでに list-comp を取得しているため、マップを削除することもできます。

reduce(list.__add__, [list(mi.image_set.all()) for mi in list_of_menuitems])

これをリストの合計として表現することもできます。

sum([list(mi.image_set.all()) for mi in list_of_menuitems], [])
于 2009-01-02T05:55:01.423 に答える
4

を使用して、複数のレベルのリストで機能するバージョンを次に示しますcollectons.Iterable

import collections

def flatten(o, flatten_condition=lambda i: isinstance(i,
               collections.Iterable) and not isinstance(i, str)):
    result = []
    for i in o:
        if flatten_condition(i):
            result.extend(flatten(i, flatten_condition))
        else:
            result.append(i)
    return result
于 2014-12-15T06:03:05.087 に答える
4

このバージョンはジェネレーターです。リストが必要な場合は微調整してください。

def list_or_tuple(l):
    return isinstance(l,(list,tuple))
## predicate will select the container  to be flattened
## write your own as required
## this one flattens every list/tuple


def flatten(seq,predicate=list_or_tuple):        
    ## recursive generator 
    for i in seq:
        if predicate(seq):
            for j in flatten(i):
                yield j
        else:
            yield i

条件を満たすものを平坦化したい場合は、述語を追加できます

Pythonクックブックから取得

于 2013-12-23T09:33:20.223 に答える
3

平らにしてみましたか?matplotlib.cbook.flatten(seq, scalarp=)から?

l=[[1,2,3],[4,5,6], [7], [8,9]]*33

run("list(flatten(l))")
         3732 function calls (3303 primitive calls) in 0.007 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.007    0.007 <string>:1(<module>)
      429    0.001    0.000    0.001    0.000 cbook.py:475(iterable)
      429    0.002    0.000    0.003    0.000 cbook.py:484(is_string_like)
      429    0.002    0.000    0.006    0.000 cbook.py:565(is_scalar_or_string)
  727/298    0.001    0.000    0.007    0.000 cbook.py:605(flatten)
      429    0.000    0.000    0.001    0.000 core.py:5641(isMaskedArray)
      858    0.001    0.000    0.001    0.000 {isinstance}
      429    0.000    0.000    0.000    0.000 {iter}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



l=[[1,2,3],[4,5,6], [7], [8,9]]*66

run("list(flatten(l))")
         7461 function calls (6603 primitive calls) in 0.007 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.007    0.007 <string>:1(<module>)
      858    0.001    0.000    0.001    0.000 cbook.py:475(iterable)
      858    0.002    0.000    0.003    0.000 cbook.py:484(is_string_like)
      858    0.002    0.000    0.006    0.000 cbook.py:565(is_scalar_or_string)
 1453/595    0.001    0.000    0.007    0.000 cbook.py:605(flatten)
      858    0.000    0.000    0.001    0.000 core.py:5641(isMaskedArray)
     1716    0.001    0.000    0.001    0.000 {isinstance}
      858    0.000    0.000    0.000    0.000 {iter}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



l=[[1,2,3],[4,5,6], [7], [8,9]]*99

run("list(flatten(l))")
         11190 function calls (9903 primitive calls) in 0.010 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.010    0.010 <string>:1(<module>)
     1287    0.002    0.000    0.002    0.000 cbook.py:475(iterable)
     1287    0.003    0.000    0.004    0.000 cbook.py:484(is_string_like)
     1287    0.002    0.000    0.009    0.000 cbook.py:565(is_scalar_or_string)
 2179/892    0.001    0.000    0.010    0.000 cbook.py:605(flatten)
     1287    0.001    0.000    0.001    0.000 core.py:5641(isMaskedArray)
     2574    0.001    0.000    0.001    0.000 {isinstance}
     1287    0.000    0.000    0.000    0.000 {iter}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



l=[[1,2,3],[4,5,6], [7], [8,9]]*132

run("list(flatten(l))")
         14919 function calls (13203 primitive calls) in 0.013 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.013    0.013 <string>:1(<module>)
     1716    0.002    0.000    0.002    0.000 cbook.py:475(iterable)
     1716    0.004    0.000    0.006    0.000 cbook.py:484(is_string_like)
     1716    0.003    0.000    0.011    0.000 cbook.py:565(is_scalar_or_string)
2905/1189    0.002    0.000    0.013    0.000 cbook.py:605(flatten)
     1716    0.001    0.000    0.001    0.000 core.py:5641(isMaskedArray)
     3432    0.001    0.000    0.001    0.000 {isinstance}
     1716    0.001    0.000    0.001    0.000 {iter}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler'

UPDATE これは私に別のアイデアを与えました:

l=[[1,2,3],[4,5,6], [7], [8,9]]*33

run("flattenlist(l)")
         564 function calls (432 primitive calls) in 0.000 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    133/1    0.000    0.000    0.000    0.000 <ipython-input-55-39b139bad497>:4(flattenlist)
        1    0.000    0.000    0.000    0.000 <string>:1(<module>)
      429    0.000    0.000    0.000    0.000 {isinstance}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



l=[[1,2,3],[4,5,6], [7], [8,9]]*66

run("flattenlist(l)")
         1125 function calls (861 primitive calls) in 0.001 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    265/1    0.001    0.000    0.001    0.001 <ipython-input-55-39b139bad497>:4(flattenlist)
        1    0.000    0.000    0.001    0.001 <string>:1(<module>)
      858    0.000    0.000    0.000    0.000 {isinstance}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



l=[[1,2,3],[4,5,6], [7], [8,9]]*99

run("flattenlist(l)")
         1686 function calls (1290 primitive calls) in 0.001 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    397/1    0.001    0.000    0.001    0.001 <ipython-input-55-39b139bad497>:4(flattenlist)
        1    0.000    0.000    0.001    0.001 <string>:1(<module>)
     1287    0.000    0.000    0.000    0.000 {isinstance}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



l=[[1,2,3],[4,5,6], [7], [8,9]]*132

run("flattenlist(l)")
         2247 function calls (1719 primitive calls) in 0.002 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    529/1    0.001    0.000    0.002    0.002 <ipython-input-55-39b139bad497>:4(flattenlist)
        1    0.000    0.000    0.002    0.002 <string>:1(<module>)
     1716    0.001    0.000    0.001    0.000 {isinstance}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



l=[[1,2,3],[4,5,6], [7], [8,9]]*1320

run("flattenlist(l)")
         22443 function calls (17163 primitive calls) in 0.016 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   5281/1    0.011    0.000    0.016    0.016 <ipython-input-55-39b139bad497>:4(flattenlist)
        1    0.000    0.000    0.016    0.016 <string>:1(<module>)
    17160    0.005    0.000    0.005    0.000 {isinstance}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

では、再帰が深くなったときの効果をテストするには、どのくらい深くなるのでしょう?

l=[[1,2,3],[4,5,6], [7], [8,9]]*1320

new=[l]*33

run("flattenlist(new)")
         740589 function calls (566316 primitive calls) in 0.418 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
 174274/1    0.281    0.000    0.417    0.417 <ipython-input-55-39b139bad497>:4(flattenlist)
        1    0.001    0.001    0.418    0.418 <string>:1(<module>)
   566313    0.136    0.000    0.136    0.000 {isinstance}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



new=[l]*66

run("flattenlist(new)")
         1481175 function calls (1132629 primitive calls) in 0.809 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
 348547/1    0.542    0.000    0.807    0.807 <ipython-input-55-39b139bad497>:4(flattenlist)
        1    0.002    0.002    0.809    0.809 <string>:1(<module>)
  1132626    0.266    0.000    0.266    0.000 {isinstance}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



new=[l]*99

run("flattenlist(new)")
         2221761 function calls (1698942 primitive calls) in 1.211 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
 522820/1    0.815    0.000    1.208    1.208 <ipython-input-55-39b139bad497>:4(flattenlist)
        1    0.002    0.002    1.211    1.211 <string>:1(<module>)
  1698939    0.393    0.000    0.393    0.000 {isinstance}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



new=[l]*132

run("flattenlist(new)")
         2962347 function calls (2265255 primitive calls) in 1.630 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
 697093/1    1.091    0.000    1.627    1.627 <ipython-input-55-39b139bad497>:4(flattenlist)
        1    0.003    0.003    1.630    1.630 <string>:1(<module>)
  2265252    0.536    0.000    0.536    0.000 {isinstance}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



new=[l]*1320

run("flattenlist(new)")
         29623443 function calls (22652523 primitive calls) in 16.103 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
6970921/1   10.842    0.000   16.069   16.069 <ipython-input-55-39b139bad497>:4(flattenlist)
        1    0.034    0.034   16.103   16.103 <string>:1(<module>)
 22652520    5.227    0.000    5.227    0.000 {isinstance}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

私は「flattenlist」に賭けます「matploblib.cbookで「flatten」が使用するように、yieldジェネレーターと高速な結果が必要でない限り、matploblibではなくこれを長い間使用します

これは、速いです。

  • そして、ここにコードがあります

:

typ=(list,tuple)


def flattenlist(d):
    thelist = []
    for x in d:
        if not isinstance(x,typ):
            thelist += [x]
        else:
            thelist += flattenlist(x)
    return thelist
于 2013-12-05T12:54:01.770 に答える
3

私の経験から、リストのリストをフラット化する最も効率的な方法は次のとおりです。

flat_list = []
map(flat_list.extend, list_of_list)

他の提案された方法との timeit 比較:

list_of_list = [range(10)]*1000
%timeit flat_list=[]; map(flat_list.extend, list_of_list)
#10000 loops, best of 3: 119 µs per loop
%timeit flat_list=list(itertools.chain.from_iterable(list_of_list))
#1000 loops, best of 3: 210 µs per loop
%timeit flat_list=[i for sublist in list_of_list for i in sublist]
#1000 loops, best of 3: 525 µs per loop
%timeit flat_list=reduce(list.__add__,list_of_list)
#100 loops, best of 3: 18.1 ms per loop

これで、より長いサブリストを処理すると、効率が向上したように見えます。

list_of_list = [range(1000)]*10
%timeit flat_list=[]; map(flat_list.extend, list_of_list)
#10000 loops, best of 3: 60.7 µs per loop
%timeit flat_list=list(itertools.chain.from_iterable(list_of_list))
#10000 loops, best of 3: 176 µs per loop

また、このメソッドは反復オブジェクトでも機能します。

class SquaredRange(object):
    def __init__(self, n): 
        self.range = range(n)
    def __iter__(self):
        for i in self.range: 
            yield i**2

list_of_list = [SquaredRange(5)]*3
flat_list = []
map(flat_list.extend, list_of_list)
print flat_list
#[0, 1, 4, 9, 16, 0, 1, 4, 9, 16, 0, 1, 4, 9, 16]
于 2014-01-20T15:19:35.770 に答える
2

どうですか:

from operator import add
reduce(add, map(lambda x: list(x.image_set.all()), [mi for mi in list_of_menuitems]))

ただし、Guidoは、読みやすさを低下させるため、1行のコードで実行しすぎないようにすることをお勧めします。複数の行に対して単一の行で必要なことを実行することによるパフォーマンスの向上は、あるとしても最小限です。

于 2009-01-02T06:28:58.843 に答える
2

pylab は flatten を提供します: numpy flatten へのリンク

于 2014-02-22T17:01:33.030 に答える
2

組み込みのシンプルなワンライナーを探している場合は、次を使用できます。

a = [[1, 2, 3], [4, 5, 6]
b = [i[x] for i in a for x in range(len(i))]
print b

戻り値

[1, 2, 3, 4, 5, 6]
于 2015-08-27T15:39:06.737 に答える
1

Python 2 または 3 でこれを実現する最も簡単な方法は、 を使用してモーフライブラリを使用することpip install morphです。

コードは次のとおりです。

import morph

list = [[1,2],[3],[5,89],[],[6]]
flattened_list = morph.flatten(list)  # returns [1, 2, 3, 5, 89, 6]
于 2015-12-15T20:00:04.643 に答える
1

リスト内の各項目が文字列の場合 (およびそれらの文字列内の文字列が ' ' ではなく " " を使用している場合)、正規表現を使用できます ( remodule)

>>> flattener = re.compile("\'.*?\'")
>>> flattener
<_sre.SRE_Pattern object at 0x10d439ca8>
>>> stred = str(in_list)
>>> outed = flattener.findall(stred)

上記のコードは in_list を文字列に変換し、正規表現を使用して引用符内のすべての部分文字列 (つまり、リストの各項目) を検索し、それらをリストとして出力します。

于 2014-12-03T20:06:19.483 に答える
1

簡単な代替手段は、numpy の連結を使用することですが、内容を float に変換します。

import numpy as np
print np.concatenate([[1,2],[3],[5,89],[],[6]])
# array([  1.,   2.,   3.,   5.,  89.,   6.])
print list(np.concatenate([[1,2],[3],[5,89],[],[6]]))
# [  1.,   2.,   3.,   5.,  89.,   6.]
于 2015-10-14T08:29:29.143 に答える
0

Python 3.4 では、次のことができるようになります。

[*innerlist for innerlist in outer_list]
于 2013-09-27T14:42:38.613 に答える