2017-10-04 25 views
1

我有兩個列表如何將列表中的元素插入到包含空值的另一個列表中?

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

L1是按日期,除非該日期值是「無」組織。

我要插入此列表進入第一:

l2=[obj9, obj6,obj7,obj8] 

我要尊重日期:如果obj1.date<obj9.date所以obj9將被放置在l1obj1,同樣的事情在別人l2

我試過這段代碼:

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

您還沒有回答我關於如何處理「空」日期的問題 - 我假定您的意思是None的值 - 因此以下可能正確處理這些日期。

你在一個不同的答案下評論了「但是我需要obj與空值在他們的索引中」,所以我實現了這樣做,否則在從第二個列表插入元素時保留原始順序可以以任何順序......並且它似乎不會非常慢(或掛起)。

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

相關問題