2016-10-04 24 views
-6

私はムービーの合計視聴時間を計算する必要があるプログラムを作成しています。Pythonでの間隔計算

1st watch = (0,10) 
2nd Watch =(13,18) 
3rd watch =(15,23) 
4th watch =(21,26) 

合計映画観= 10 + 5 + 5 + 3 = 23分

どのように私は、Python

+0

数字だけを追加します。それは、D = 23

EDITいますか?私は "コード"の数字が "10 + 5 + 5 + 3 = 23分"にどのように関係しているのか理解していません。 – Carpetsmoker

+0

0-10 == 10分、13-18 == 5分、15-23 == 5分(映画は既に前の間隔で18分まで監視されていたので)、21-26 = 3分(以前より23分まで見た) –

+0

これに関する助けを歓迎します –

答えて

1

でOKをこれを実装することができ、ここでの本当の挑戦は、重複配列です。申し訳ありませんが、あなたの質問はあまり明確ではありません。

それは最適ではありません(より良いアルゴリズムについては以下を参照)が、あなたは試すことができます:

l = [(0, 10), (13, 18), (15, 23), (21, 26)] 
s = set() 
for w in l: 
    s = s.union(range(*w)) 
d = len(s) 

それはトリックを行う必要があります。より良いアルゴリズム

l = [(0, 10), (13, 18), (15, 23), (21, 26)] 
flat_list = sorted([(t[0], 1) for t in l] + [(t[1], -1) for t in l]) 
# flat_list == [(0, 1), (10, -1), (13, 1), (15, 1), (18, -1), (21, 1), (23, -1), (26, -1)] 
duration = level = 0 
start = None 
for minute, level_inc in flat_list: 
    level += level_inc 
    if level == 0: 
     duration += minute - start 
     start = None 
    elif start is None and level == 1: 
     start = minute 
assert(level == 0) # something is wrong otherwise 
print("Duration is {}".format(duration)) 
+0

これは動作します。コードの2行目について説明してください。 flat_list = t in l] + [(t [1]、-1)for t]のsorted([(t [0]、1))...この部分は何をしていますか? –

+0

2つの項目のタプルを含むフラットなリストを作成します。最初の1つはタイムコードで、2つ目は開始タイムコードの場合は1、終了タイムコードの場合は-1です。このリストはタイムコードでソートされます。 –

+0

分解する: '[(t [0]、1)for t in l]'はリスト内包です。開始タイムコードを持つ2タプルのリストを作成します。 '[(t [1]、-1)for t in l]'は終了タイムコードでも同じですが、-1ではなく2番目の項目として-1, '[(t [0]、1)for t in l] + [(t [1]、-1)for t in l] 'は、2番目のリストを最初のリストに追加することで1つのリストを構築します(ただし、追加するのは同じオブジェクトではないので新しいもの)。 'sorted(...)'は、このタプルのリストをソートします。タプルのデフォルトのソートは、最初のアイテム(および必要な場合は次のアイテム)によるものです。その場合はタイムコードです。 –

関連する問題