-1

私はリストのリストを持っていますa

a = [[1, 3, 7], [3, 5, 7], [-23, -34, -45]]

および別のリストb例:

b = [1, 2, 3, 4]

cリストの1行の最初の2列の項目がリストaに存在しない場合、bその行がリストcに追加されるリストを作成したいと思います。リストの例では、c は次のようになります。

c = [[7], [7], [-45]]

の最初の行にaは 1 と 3 が含まれており、どちらも に存在しb、2 番目の行には に存在する 3 が含まれていbます。

私は成功せずに次のことを試しました:

for row in a:
    if row[0] or row[1] not in b:
        c.append(a)

for row in a:
    if row[1] not in b:
        if row[0] not in b:
            c.append(a)

aどちらもコピーするように見えるのでb

私のコードが機能しない/代わりに機能するコードを知っている人はいますか?

編集:申し訳ありませんが、最初のラウンドで期待した結果が間違っていました

編集2:私は大失敗しました-私はそれをすべて間違って設計していました.入力リストは別のソースから来ており、間違ってコピーしました. だから私が実際にやろうとしていることは次のとおりです

c = [ ]

a = [[1, 3, -23], [3, 5, -34], [7, 7, -45]]
b = [1, 2, 3, 4]

for row in a:
    if row[0] not in b and row[1] not in b:
        c.append(row)

助けてくれたみんなに感謝します。すみません、私はとてもばかです。

4

4 に答える 4

1

setsとを使用するだけlist comprehensionsです:

[row[2] for row in a if set(b)-set(row[:2]) != set(b)] # prints [7, 7]
于 2013-04-18T15:40:19.423 に答える
1

もしかして条件が悪い?

for row in a:
    if row[0] not in b or row[1] not in b:
        c.append(a)

row[0]がゼロでない場合は true であるのに、なぜ常に a を b にコピーするのでしょうか。

于 2013-04-18T15:43:44.710 に答える
1

@muzulgetの答えを少し修正:

for row in a:
    if row[0] not in b or row[1] not in b:
        c.append(a[2])
于 2013-04-18T15:51:46.577 に答える
1

私は一緒に行きます:

c = [row[2:] for row in a if row[0] in b or row[1] in b]

または、セットで:

b_set = set(b)
c = [row[2:] for row in a if not set(row[:2]).isdisjoint(b_set)]

テスト:

>>> a = [[1, 3, 7], [3, 5, 7], [-23, -34, -45]]
>>> b = [1, 2, 3, 4]
>>> c = [row[2:] for row in a if row[0] in b or row[1] in b]
>>> print c
[7, 7]

コメントの最後の定義に合うようです。それが正しいかどうかは定かではありませんが、;)

于 2013-04-18T15:51:52.630 に答える