2016-05-15 17 views
1

datetimeという非常に長いリストが時系列でソートされます(好きなだけ単調に増加します)。日時のリストから日、時間、秒を抽出します

import datetime 
dates=[datetime.datetime.fromtimestamp(xx) for xx in xrange(huge_number)] 

私の本当のリストとの違いは、タイムステップは常に一定ではないということです、秒、時間、または日の間にギャップが通常あります。そのようなことを想像してみてください。

は、私は何をしたいの正確な日時(PyQt4 GUIを介して)、ユーザが選択した作りで、私はこれを行うには推測した

  1. すべて異なる日がためdatetimes_list
  2. に含まれます毎日、私は、確かに

この時間に対応する瞬間の完全なリストを取得し、すべての異なる時間毎時間この日

  • に対応してリストを作成しますいくつかfor/ifループでこれを行うことができますが、これを行うための効率的でコンパクトな方法があれば、itertoolsgroupbyイテレータを使用しているのだろうかと思いました。しかし、もし私が実際にitertoolsで快適に感じないなら、誰かが素晴らしいアイデアを持っているならば!

  • +0

    [bisect](https://docs.python.org/3.0/library/bisect.html)を使用して、ソートされたリストで特定の日付を見つけることができます。ユーザは、前のリストからエントリを選択したことに応答して、おそらく2と3のリストを動的に構築する必要があります。 –

    +1

    注:現地時間は必ずしも単調ではありません(例えば、DSTの遷移による)ので、fromtimestamp()の結果は必ずしもあなたのケースでは増加していません(ローカルタイムゾーンによります)。 – jfs

    答えて

    1

    なぜ辞書又はOrderedDict使用していない:それは、いずれかに対するO(1)アクセス時間をもたらす

    import collections 
    d=collections.OrderedDict() 
    for e in dates: 
        day, hour, full_time=e.strftime('%Y%m%d'), e.strftime('%H'), e.strftime('%H%M%S') 
        d.setdefault(day,collections.OrderedDict()).setdefault(hour, []).append(full_time) 
    

    import collections 
    d=collections.OrderedDict() 
    for e in dates: 
        d.setdefault(e.strftime('%Y%m%d'),collections.OrderedDict()).setdefault(e.strftime('%H'), []).append(e.strftime('%H%M%S')) 
    

    以下コンパクトが、より可読製剤中の日付の選択/任意の時間の選択

    +0

    ありがとう回答。それは私にとって素晴らしい作品です! –

    +0

    クール。あなたはこの回答にokとマークすると素晴らしいでしょう。 – Dvx

    関連する問題