0

リストからいくつかの要素をステップする必要があります (この場合は n) 別のリストもあります ( o リスト)

n=['A','B','C','D','E']
o=['A','B','C','D','E','AS','sd','Z','R']
n.sort()

このコードを使用すると:

for o in sorted(n): 

コードは に対して実行され'A','B','C','D','E'ます。

'AS','sd','Z','R'forコードを実行する必要がありますが、アイテムだけです。

のようなもの: n リストからのアイテムなしで o リストからのアイテムのコードを実行します。

4

4 に答える 4

6

これoは、重複がない場合にのみ機能します。

n = ['A','B','C','D','E']
o = ['A','B','C','D','E','AS','sd','Z','R']
a = sorted(set(o) - set(n))

# a == ['AS', 'R', 'Z', 'sd']

それ以外の場合はこれを使用します:

n = ['A','B','C','D','E']
o = ['A','B','C','D','E','AS','sd','Z','R', 'AS']
s = set(n)
a = sorted(elem for elem in o if elem not in s)

# a == ['AS', 'AS', 'R', 'Z', 'sd']
于 2012-05-07T11:04:05.780 に答える
1

フィルタリングにはリスト内包表記を使用し、並べ替えには sorted() を使用することをお勧めします。

for item in sorted(element for element in n if element not in o):
  print item

n大きくなる傾向がある場合は、最初にセットを作成する方が高速です。

forbidden = set(o)
for item in sorted(element for element in n if element not in forbidden):
  print item

編集:コメントで提案されているように、セットを追加し、代わりにジェネレーター式を使用しました。

于 2012-05-07T11:09:50.707 に答える
0
n = ['A','B','C','D','E']
o = ['A','B','C','D','E','AS','sd','Z','R']
result = sorted(set(o) - set(n))
于 2012-05-07T11:31:33.577 に答える
0

セットにはこのような操作があります。

n=['A','B','C','D','E']
o=['A','B','C','D','E','AS','sd','Z','R']

for ab in set(o).difference(set(n)):
    print ab
于 2012-05-07T11:09:04.013 に答える