0

私は2つのリストを持っており、特定の金額に対する$金額の違いを比較しようとしています。

リストは

file1 = ['file1,product1,-1000.56', 'file1,product2,500.43']

file2 = ['file2,product1,-1001.37', 'file2,product2,511.99']

$ 5を超える場合は、以下の形式で差額を印刷したい

file1 product2 500.43
file2 product2 511.99

Difference = $11.56

製品1は5ドル未満であるため、表示されません

これを行う良い方法はありますか?

私が試してみました...

for i in file1:
    i.split(",")

これはリストを分割するために機能しますが、2つの$金額を比較して、$5以上しか表示しない方法を教えてください。

誰かが私に$5の差を超える2つの$の金額を比較する方法を教えてくれれば、残りを理解できるでしょう。

4

3 に答える 3

3

zip()両方のリストをトラバースするために使用します。

In [114]: file1 = ['file1,product1,-1000.56', 'file1,product2,500.43']

In [115]: file2 = ['file2,product1,-1001.37', 'file2,product2,511.99']

In [116]: for f1,f2 in zip(file1,file2):
    spl1=f1.split(',')     #returns something like ['file1', 'product2', '500.43']
    spl2=f2.split(',')     #returns something like ['file2', 'product2', '511.99']

    diff=abs(float(spl1[-1])-float(spl2[-1]))  ##use abs() to find the difference

    if diff>5:  
        print " ".join(spl1)                    #use print() as you're on py 3.x 
        print " ".join(spl2)                    #join the lists by " " 
        print "${0}".format(diff)
   .....:         
   .....:         
file1 product2 500.43
file2 product2 511.99
$11.56
于 2012-10-22T23:35:55.487 に答える
1

両方のファイルで発生する同一の製品のみに関心がある場合は、製品->値のルックアップのdictを作成してから、ファイル間の違いを取得できます(テストされておらず、よりエレガントにすることができます)。

file1 = ['file1,product1,-1000.56', 'file1,product2,500.43']
file2 = ['file2,product1,-1001.37', 'file2,product2,511.99']

d1 = {k: float(v) for k, v in (el.split(',')[1:] for el in file1)}
d2 = {k: float(v) for k, v in (el.split(',')[1:] for el in file2)}

for key in d1.keys() & d2.keys():
    print (key, abs(d1[key] - d2[key]))

# product2 11.56
# product1 0.81
于 2012-10-22T23:38:42.560 に答える
0

カンマで分割すると、最後の要素は金額を表す文字列になります。最初のステップは、を使用してこれを数値に変換することfloatです。フロートとして2ドルの金額を取得したら、それらを減算して5.0、たとえば次のように比較できます。

diff = abs(float('511.99') - float('500.43'))
if diff >= 5.0:
    # print it

また、組み込み関数absを使用して、正の差が得られることを確認しました。これにより、最初にどちらの値が大きいかを判断する必要がなくなります。

于 2012-10-22T23:33:08.477 に答える