0

次のようなリストがあります。

A = [[2, 3], 5, 7, 8, [2, 3], 1, [9, 2]]

ネストされたリスト ([2, 3], ..., [2, 3], ..., [9, 2]) 内のすべての値を比較し、1 回出現する数字、この場合は 9 を抽出したい、リスト内の 1 つのリストにのみ表示される番号が見つかった場合。それがそのブロックの答えです。

A = [[2, 3], 5, 7, 8, [2, 3], 1, [9]]
4

3 に答える 3

1

乱雑で読みにくいリストの理解ですが、他の答えはとても長いです!

リストメンバーが整数の場合、またはすべてのサブリストの結合リストで複数回出現するメンバーのみを持つサブリストの場合は、リストメンバーを含めます。それ以外の場合、つまり、すべてのサブリストで一意のメンバーを持つサブリストの場合は、そのサブリストの一意のメンバーのみを含めます。

>>> A = [[2, 3], 5, 7, 8, [2, 3], 1, [9, 2]]
>>> L = [y for x in A if type(x) == list for y in x]
>>>> [x if (type(x) == int) else x if all([L.count(y) > 1 for y in x]) \
      else [y for y in x if L.count(y) == 1] for x in A]

[[2, 3], 5, 7, 8, [2, 3], 1, [9]]
于 2012-06-05T01:03:57.167 に答える
0

1つのサブリストにのみ表示される値を抽出する場合は、そのサブリストに何度表示されるかに関係なく、次のように実行できます。

from collections import Counter

def get_answer(x):
    my_list = []

    for ele in x:
        if isinstance(ele, list):
            my_list.extend(list(set(ele)))

    countz = Counter(my_list)
    return [k for k,v in countz.iteritems() if v == 1]

結果:

>>> get_answer([[2, 3], 5, 7, 8, [2, 3], 1, [9, 9]])
[9]
>>> get_answer([[2, 3], 5, 7, 8, [2, 3], 1, [9, 2]])
[9]

1つのサブリストにのみ表示され、そのサブリストに1回だけ表示される番号を抽出する場合、つまり、すべてのサブリストのすべての要素に1回だけ表示される場合は、次の行を変更します。

my_list.extend(list(set(ele)))

my_list.extend(ele)
于 2012-06-05T00:22:23.437 に答える
0

これは、あなたの望むことですか?

import collections

A = [[2, 3], 5, 7, 8, [2, 3], 1, [9, 2]]
B = []
occurences = collections.defaultdict(lambda: 0)
for element in A:
    if type(element) is list:
        B.append(element)
for sublist in B:
    for number in sublist:
        occurences[number] += 1
for sublist in B:
    for number in sublist:
        if occurences[number] == 1:
            del sublist[:]
            sublist.append(number)
print(A)

結果:

[[2, 3], 5, 7, 8, [2, 3], 1, [9]]
于 2012-06-05T00:28:09.703 に答える