0

各リスト要素が次のような 3 つの部分で構成されているリストがあるとします。

[[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 0, 2], [0, 1, 1], [0, 2, 0], [1, 0, 1], [1, 1, 0], [2, 0, 0], [0, 0, 3], [0, 1, 2], [0, 2, 1], [0, 3, 0], [1, 0, 2], [1, 1, 1], [1, 2, 0], [2, 0, 1], [2, 1, 0], [3, 0, 0], [0, 0, 4], [0, 1, 3], [0, 2, 2], [0, 3, 1], [0, 4, 0], [1, 0, 3], [1, 1, 2], [1, 2, 1], [1, 3, 0], [2, 0, 2], [2, 1, 1], [2, 2, 0], [3, 0, 1], [3, 1, 0], [4, 0, 0]]

各リスト要素の内容を確認する方法はありますか。つまり、2 つのゼロを含むすべての要素のインデックス位置と、1 つのゼロを含むすべての要素のリストを含む上記に基づいて、新しいリストを作成したいとします。どうすればいいですか?

リスト要素に単一のものがあるかどうかを確認する方法は知っていますが、その要素が2回発生するかどうかはわかりません。

4

4 に答える 4

3

メソッドを使用できます.count

two_zeros = [x for x in lst if x.count(0) == 2]
one_zero = [x for x in lst if x.count(0) == 1]

本当に賢くなりたい場合は、collections.defaultdict を使用して単一のループですべてを実行できます。

d = collections.defaultdict(list)
for sublist in lst:
    d[sublist.count(0)].append(sublist)

これで、その数のゼロを含むサブリストへのゼロの数のマッピングができました。

もちろん、実際にインデックスのリストが必要な場合は、 を使用できますenumerate

于 2013-06-18T14:50:59.107 に答える
2

を使用しcount()ます。

からhelp:

count(...)
    L.count(value) -> integer -- return number of occurrences of value

コード例 (リストの一部) -

>>> startList = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 0, 2], [0, 1, 1], [0, 2, 0], [1, 0, 1], [1, 1, 0], [2, 0, 0], [0, 0, 3], [0, 1, 2], [0, 2, 1]]
>>> for element in startList:
        element.count(0)
2
2
2
2
1
2
1
1
2
2
1
1

リストの作成方法 上記のアイデアをリスト内包表記で使用します。

>>> twoZero = [index for index, elem in enumerate(startList) if elem.count(0) == 2]
>>> twoZero
[0, 1, 2, 3, 5, 8, 9]
>>> oneZero = [index for index, elem in enumerate(startList) if elem.count(0) == 1]
>>> oneZero
[4, 6, 7, 10, 11]

これはリストの一部です。

于 2013-06-18T14:50:50.077 に答える
0

リスト内包表記、list.countenumerateを使用できます。

two_zeros_index = [i for i, item in enumerate(datalist) 
                   if item.count(0) == 2]

しかし、2 つのリストを作成したいので、昔ながらの for ループの方が良いかもしれません (つまり、1 回だけ反復しますdatalist)。

one_zero, two_zeros_index = [], []
for i, item in enumerate(datalist): 
    n = item.count(0)
    if n == 1:
        # Every *item* containing one zero
        one_zero.append(item)
    elif n == 2: 
        # Every *index* containing two zeros
        two_zeros_index.append(i)
于 2013-06-18T14:52:02.020 に答える
0

リストreqdには、必要なすべてのインデックスが含まれます。

>>> reqd = []
>>> for i in range(len(d)):

    if d[i].count(0) == 2:
        reqd.append(i)


>>> reqd
[0, 1, 2, 3, 5, 8, 9, 12, 18, 19, 23, 33]
于 2013-06-18T14:52:48.143 に答える