2017-10-04 8 views
1

私は二つのリストリストからヌル値を含む別のリストに要素を挿入する方法はありますか?

l1=[obj1, obj2, obj3,obj4, obj5] 

を持っL1は、日付の値が「どれも」ではない場合を除いて、日付別に整理されています。

私が最初にこのリストを挿入する:

l2=[obj9, obj6,obj7,obj8] 

私は日付を尊重したい:l2

obj1.date<obj9.dateので obj9obj1l1に配置され、他の人のために同じものならば

私はこのコードを試してみました:

for el in l1: 
     for e in l2: 
      if e.date<el.date 
       l1.insert(l1.index(el),e) 
      else: 
       l1.insert(l1.index(el)+1,e) 

プログラムで実行されますエラーは返されません。

pythonic方法でこれを行うにはどのようなアイデアですか?

+1

誤差はありますか?どの部分が「働いていない」のですか? – brddawg

+0

結果が表示されるテンプレートがまだロードされていて、リストが表示されていない – rahma

+0

'None'日付のオブジェクトを挿入し、順序を維持することをどのようにしたいのですか? – martineau

答えて

2

あなたは私はあなたが以下のことプロセス正しくこれら-SO Noneの平均値を想定しているが取り扱う、「ヌル」の日付にする方法についての私の質問に答えていません。

あなたは、別の答えの下のコメントで「しかし、インデックスにnull値のobjが必要です」と言っていました。そうしないと、2番目のリストから要素を挿入するときに元の順序を保持します。どんな順番でもかまいません...そしてそれはひどく遅く走っているようにも見えません。

import datetime 

class Object(object): 
    def __init__(self, date_string=None): 
     self.date = (date_string if date_string is None else 
        datetime.datetime.strptime(date_string, "%Y%m%d")) 

    def __repr__(self): 
     return '{}({!r})'.format(self.__class__.__name__, 
           self.date.strftime("%Y%m%d") if self.date 
           else None) 

obj1 = Object('20171001') 
obj2 = Object('20171002') 
obj3 = Object(None) 
obj4 = Object('20171004') 
obj5 = Object('20171005') 

obj6 = Object('20171006') 
obj7 = Object('20171007') 
obj8 = Object('20171008') 
obj9 = Object('20171009') 

l1 = [obj1, obj2, obj3, obj4, obj5] 
l2 = [obj9, obj6, obj7, obj8] 

print('Before:') 
print(l1) 
print(l2) 

for elem2 in l2: 
    for i, elem1 in enumerate(l1): 
     if elem1.date and elem2.date < elem1.date: 
      l1.insert(i, elem2) 
      break 
    else: 
     l1.append(elem2) 

print('After:') 
print(l1) 

出力:

Before: [Object('20171001'), Object('20171002'), Object(None), Object('20171004'), Object('20171005')] [Object('20171009'), Object('20171006'), Object('20171007'), Object('20171008')]

After: [Object('20171001'), Object('20171002'), Object(None), Object('20171004'), Object('20171005'), Object('20171006'), Object('20171007'), Object('20171008'), Object('20171009')] `

+0

ありがとうたくさん:) – rahma

関連する問題