如何将列表中的元素插入到包含空值的另一个列表中?

时间:2017-10-04 15:27:22

标签: python

我有两个列表

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

l1按日期组织,除非日期值为“无”。

我想将此列表插入第一个:

l2=[obj9, obj6,obj7,obj8]

我想尊重日期:如果obj1.date<obj9.date obj9 l1 obj1 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) for ii = 1:length(firstvariable) foldername{ii} = sprintf('''\\STH\\Sth %s\\ABC %s;''',firstvariable{ii},secondvariable{ii}); end foldername = {''\STH\Sth A\ABC D;''} {''\STH\Sth B\ABC E;''} {''\STH\Sth C\ABC F;''} foldername{index} % Gives back a string foldername(index) % Gives back a cell

我试过这段代码:

{{1}}

程序运行没有错误,但没有返回结果。

有关如何以pythonic方式执行此操作的任何想法?

1 个答案:

答案 0 :(得分:2)

你还没有回答我关于你如何做的问题&#34; null&#34;处理的日期 - 我假设您的意思是None的值 - 所以以下可以正确处理这些日期。

你确实说过&#34;但我需要obj,其值为null,并且在#34;在一个不同的答案下的评论中,所以我实现了那样做的东西,否则在插入第二个列表中的元素时可以按任何顺序保留原始顺序......并且它似乎运行速度非常慢(或挂起。。

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')] `