0

2 つのファイルと 2 つのシナリオがあります。

  1. 両方のファイルの内容は同じですが、内容の順序は同じではありません。例えば:

    • ファイル 1:tom albert jim
    • ファイル 2:albert jim tom

  2. 両方のファイルには、重要なコンテンツ ( jimalbert、および などtom) と、重要でないコンテンツ (jackまたは などjason) が含まれており、これらは除外する必要があります。例えば:

    • ファイル 1:tom albert jim jason
    • ファイル 2:albert jim tom

単純なtrueまたはfalseするでしょう。もちろん、ここの両方の例で、出力はtrue. 何か案は?

4

2 に答える 2

1

これを試すことができます。アルファベット順に並べてから、アイテムを 1 つずつ比較してください。この助けを願っています

#Let's call f1 and f2 are string that you read from f1 and f2
f1 = 'tom albert jim jason'
f2 = 'jack albert jim tom'

unimportant_list = ['jim', 'albert', 'tom'] #this should be defined somewhere

#make list data of f1, f2. word split by a space and remove item in unimportant_list
list1 = [x for x in f1.split(' ') if x not in unimportant_list]
list2 = [x for x in f2.split(' ') if x not in unimportant_list]

#sort both list for easy compare
list1.sort()
list2.sort()

#compare length of 2 list first for better performance and also prevent exception in the for loop
if not len(list1) == len(list2):
    return false

#compare 2 list one by one
result = true
for i in range (len(list1)):
    if not list1[i] == list2[i]: #if some item not equal mean 2 list is not same
        result = false
return result
于 2013-08-26T09:52:41.797 に答える
1

この回答は、入力が論理的に値の袋であること、つまり値がカウントされることを前提としていますが、それらの位置は重要ではありません。また、イニシエータファイルよりも他のファイルに大きな量が含まれていても問題ないと想定していますが、その逆は当てはまりません。最後に、イニシエータファイルの値のみが他のファイルに表示されることが許可されていると想定しています。

① 両方のファイルを読み取り、 ②それぞれの内容を (おそらくスペースで?)バッグに分割します(これに使用collections.Counterします) .

①両方のファイルを読む:

with open('initiator') as f:
  contentsI = f.read()
with open('other') as f:
  contentsO = f.read()

② コンテンツをセットに分割し、その過程で不要なものをすべて削除します。

from collections import Counter
tokensI = Counter(value for value in contentsI.split()
                        if value not in [ 'unwanted1', 'unwanted2' ])
tokensO = Counter(value for value in contentsO.split()
                        if value not in [ 'unwanted1', 'unwanted2' ])

③ & ④ バッグを比較する:

return not (tokensI - tokensO) and not (set(tokensO) - set(tokensI))
于 2013-08-26T09:55:15.820 に答える