1

Pythonにロードした2つのファイルがあり、2つの間の共通の値を表示するリストを出力しようとしています。

最初のファイルのリストは次のようになります(完全なリストではなく、その一部です)。

    [datetime.datetime(2010, 7, 30, 12, 20, 19, 143000), datetime.datetime(2010, 7, 30, 12, 22, 33, 631000), datetime.datetime(2010, 7, 30, 12, 22, 41, 236000), datetime.datetime(2010, 7, 30, 12, 23, 43, 547000), datetime.datetime(2010, 7, 30, 12, 23, 57, 453000), datetime.datetime(2010, 7, 30, 12, 26, 4, 713000), datetime.datetime(2010, 7, 30, 12, 26, 9, 46000), datetime.datetime(2010, 7, 30, 12, 28, 30, 313000)]

そして、2番目のリストは次のようになります(ここでも、完全なリストではなく、その一部です)。

    [datetime.datetime(2010, 7, 30, 13, 43, 2, 993000), datetime.datetime(2010, 7, 30, 13, 43, 10, 917000), datetime.datetime(2010, 7, 30, 13, 48, 56, 697000), datetime.datetime(2010, 7, 30, 13, 49, 14, 399000), datetime.datetime(2010, 7, 30, 13, 51, 45, 882000), datetime.datetime(2010, 7, 30, 13, 52, 6, 432000), datetime.datetime(2010, 7, 30, 13, 54, 26, 873000), datetime.datetime(2010, 7, 30, 13, 59, 2, 164000), datetime.datetime(2010, 7, 30, 13, 59, 15, 515000), datetime.datetime(2010, 7, 30, 14, 3, 43, 742000), datetime.datetime(2010, 7, 30, 14, 5, 59, 975000), datetime.datetime(2010, 7, 30, 14, 13, 36, 887000), datetime.datetime(2010, 7, 30, 14, 13, 42, 92000)]

そして、コードは次のようになります。

    for infilelines in text:
        lspl1 = infilelines.split(',')
        cattime = lspl1[2]
        catdate.append(datetime.strptime(lspl1[1]+cattime,'%d/%m/%Y%H:%M:%S.%f'))



    #print catdate


    NNSRCfile = sf.readsrc(NNSRC)
    l1 = NNSRCfile['date']
    l2 = NNSRCfile['time']
    NNSRCfile['datetime2'] = zip(l1,l2)
    #print NNSRCfile['datetime2']


    NNSRCfile['datetimenew'] = [datetime.strptime(i+j,'%m-%d-%Y%H:%M:%S.%f') for i,j in zip(l1,l2)]

    #print NNSRCfile['datetimenew']
    ii = 0
    while ii <= len(catdate):
        try:
            #print NNSRCfile['datetimenew'].index(catdate[ii]), "WE FOUND A MATCH!!!!"
            indices = NNSRCfile['datetimenew'].index(catdate[ii])
        except:
            print "No match."
            #continue
        ii += 1

エラーは発生しませんが、スクリプトが意図したとおりに機能していません。2つの別々のリストに共通するすべての要素の完全なリストが欲しいのですが。この投稿に完全なリストを含めなかったことは知っていますが、手動で調べてみると、2つの間に共通点があることがわかります。

どんな助けでも大歓迎です!

4

3 に答える 3

3

ここは順調だと思いsetます。ファイルをリストに解析したと仮定すると、次のことができます。

intersection = set(list1) & set(list2)

そして、ボブはあなたのおじです、あなたは終わりました!


上記のメソッド形式もあります。

intersection = set(list1).intersection(list2)

これには、2セット(1セットのみ)を作成する必要がないという利点があります。これは、実際に両方のファイルをメモリに読み込む必要がないことを意味します。2番目のファイルを使用して、セットを遅延的に解析/更新できます。

于 2012-09-24T15:59:16.443 に答える
0

一般的な値を探しているだけの場合は、setintersectionを使用してください。

a = set([1,3,5,7])
b = set([3,5,6,9])
print a.intersection(b) # prints set([3, 5])
于 2012-09-24T15:59:25.473 に答える
0

2つのリストの共通部分が必要な場合は、次のように実行できます。

>>> a = [1,2,3,4]
>>> b = [3,4,5,6]
>>> set(a).intersection(set(b))
set([3, 4])
于 2012-09-24T16:02:26.193 に答える