2

各リストに電子メール アドレスが含まれている 2 つのリストを比較するコードを作成しようとしています。ただし、同じ電子メールが異なる行番号にlist1存在する可能性があるため、行ごとに比較することはできません。list2

私はこの方法を使用しています:

F1 = open("c:\\FILEA.txt", "r").read().split('\n')
F2 = open("c:\\FILEB.txt", "r").read().split('\n')

lines1 = filter(None, (line.rstrip() for line in sorted([n.lower() for n in F1])))
lines2 = filter(None, (line.rstrip() for line in sorted([n.lower() for n in F2])))


for i in ( i for i in lines1 if lines2[:2] == lines1[:2]):
    print i
    break

上記は単なる例ですが、行ごとに比較するだけです。からの各電子メールを比較してlist1、電子メールが に存在するかどうかを確認する方法を知っている人はいますかlist2?

どうもありがとう

4

1 に答える 1

4

一方が他方にあるかどうかを確認するだけの場合 (頻度などは気にしない場合)、 を使用setして各ファイルから一意の出現を保存しintersection、2 つのセットの を見つけることができます。これは、両方のファイルに存在する電子メールを表します ( with2 つのファイルを含むステートメントは Python2.7+ の機能であることに注意してください)。

>>> l1 = set()
>>> l2 = set()
>>> with open('FILEA.txt', 'rb') as f1, open('FILEB.txt', 'rb') as f2:
...     for line in f1.readlines():
...         l1.add(line.strip())
...     for line in f2.readlines():
...         l2.add(line.strip())
... 
>>> 
>>> l1
set(['another@gmail.com', 'andanother@hotmail.com', 'this@email.com'])
>>> l2
set(['unique@somehost.com', 'this@email.com', 'not@example.com'])
>>> l1 & l2
set(['this@email.com'])

セットを使用すると、他の (潜在的に) 役立つ操作を実行することもできます。

両方のセット (結合) にあるアイテムを識別します。

>>> l1 | l2
set(['another@gmail.com', 'unique@somehost.com', 'andanother@hotmail.com', 'this@email.com', 'not@example.com'])

一方のセットに含まれているが他方のセットに含まれていないアイテム (違い):

>>> l1 - l2
set(['another@gmail.com', 'andanother@hotmail.com'])
>>> l2 - l1
set(['not@example.com', 'unique@somehost.com'])

各セットに固有のアイテム (和集合から交差部分を引いたものと考えてください) (symmetric_difference):

>>> l1 ^ l2
set(['another@gmail.com', 'not@example.com', 'unique@somehost.com', 'andanother@hotmail.com'])

最後に、演算子の代わりにメソッドを使用してこれらの操作を実行することもできます。メソッドを使用するには、セットを取得し、上記の括弧内の名前の 1 つを追加して、もう 1 つのセットを引数にします。

>>> l1.intersection(l2)
set(['this@email.com'])

私のファイルは次のようになりました:

FILEA.txt

this@email.com
another@gmail.com
andanother@hotmail.com

FILEB.txt

not@example.com
this@email.com
unique@somehost.com
于 2012-12-09T20:40:27.350 に答える