7

私はこのようなリストを持っています:

[[(video1,4)], [(video2,5),(video3,8)], [(video1,5)], [(video5, 7), (video6,9)]...]

このリストの各アイテムには、単一のデータペアまたはタプルが含まれている可能性があります。このリストを次のように変更します。

[(video1,4),(video2,5),(video3,8),(video1,5),(video5,7),(video6,9)...]

次に、これを行います。

for item in list:
    reqs = reqs + item[1]
    b.append(item[0])
c = set(b)

リストの構造を変更する方法、または元のリストに基づいて同じ計算を行う方法がわかりませんか?

4

7 に答える 7

9

1 つのレベルを平坦化するには、次を使用できますitertools.chain.from_iterable()

flattened_list = itertools.chain.from_iterable(my_list)
于 2012-04-12T15:40:52.677 に答える
9

リストをフラットにしたいだけなら、次を使用してitertools.chain.from_iterableください: http://docs.python.org/library/itertools.html#itertools.chain.from_iterable

于 2012-04-12T15:41:21.850 に答える
9

リスト内包表記を使用してこれを行う非常に簡単な方法があります。この例は、こちらの python ドキュメントに記載されています。

>>> # flatten a list using a listcomp with two 'for'
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

これが、実装したいソリューションです。あなたの例によると、これは最も簡単な解決策です

In [59]: your_list = [[('video1',4)], [('video2',5),('video3',8)], [('video1',5)], [('video5', 7), ('video6',9)]]

In [60]: improved_list = [num for elem in your_list for num in elem]

In [61]: improved_list
Out[61]: 
[('video1', 4),
 ('video2', 5),
 ('video3', 8),
 ('video1', 5),
 ('video5', 7),
 ('video6', 9)]
于 2012-10-20T00:08:35.387 に答える
3

このリストが単独でネストされている場合(リストのリスト)、これを行うことができます。これは私がよく使用します:

flat_list = sum(list_of_lists, [])

これは、 sum が単純にリストを追加するという事実のために機能し、リストの追加はPythonで期待どおりに機能します:)

: これは非効率的であり、読み取り不能と言う人もいます。

于 2014-12-17T22:34:42.673 に答える
2

ここに別のものがあります(ライブラリなし):

def plus(a,b): return a + b
reduce(plus, your_list)
于 2012-04-13T10:02:52.757 に答える
1

Try this:

from itertools import chain 

c = set()
reqs = 0
for vid, number in chain(*your_list): 
    c.add(vid)
    reqs += number 

Also see related post Flattening a shallow list in Python.

There should be negligible performance increase from using chain.from_iterable(list) rather than chain(*list), but it's true that the former looks cleaner.

于 2012-04-12T15:51:21.777 に答える
-1

データ構造からすべてのタプルを抽出するには ...

def get_tups(y):
    z = []
    if y:
        for x in y:
            if isinstance(x, tuple):
                z.append(x)
            else:
                z.extend(get_tups(x))
    return z

多分 ...

于 2012-04-12T15:55:06.507 に答える