Python:如果list1中的element1等于list2中的element2,则更改element1

时间:2014-10-08 15:52:00

标签: python list element

这是UNI的“编程基础”课程的作业的一部分。 它说:

  

记下codes(lst,cods)函数,其中lstccccyyyymmgg中的一系列字符串(cccc是随机字符,yyyymmgg是日期), cods是一系列4个字符的字符串。

     

该功能应该像这样工作:   如果lst中的'cccc'等于cods中的字符串,则包含cccc的元素将以['cccc',dd,mm,yyyy]格式打印;否则以['ccccyyyymmdd']格式打印。

     

例如,   如果"AcDa20140930"lst的元素且"ACDA"位于cods,   然后列表"AcDa20140930"中的元素lst被4个元素替换   "ACDA", 30, 9, 2014

我试图像这样解决它:

def codes(lst, cods):
    lst1=[]
    for element in lst:
        cccc = lst[0:3]
        yyyy = lst[4:7]
        mm = lst[8:9]
        dd = lst[10:11]
        for code in cods:
            if cccc == code:
                lst1 += cccc, dd, mm, yyyy
    return lst1

first = ['Cara20130716', 'Tara20080601', 'PALA19961231', 'Melo19601023']
secnd = ['PALA', 'CARA', 'Tara']
print codes(first, secnd)

[CODE MODIFIED]:现在输出为[]。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

试试这个,它有效。

解决方案#1:

repl.it [已编辑]

上的演示

代码:

def codes(lst, cods):

    toAdd = []
    c = 0
    for ind, elem in enumerate(lst):
        if elem[:4] not in cods:
            toAdd.append(elem + str(ind + c))
            lst.remove(elem)
            c += 1
    for ind, elem in enumerate(lst):
        tmp = []
        tmp.append(elem[:4])
        tmp.append(elem[10:])
        tmp.append(elem[8:10])
        tmp.append(elem[4:8])
        lst.insert(ind, tmp)
        lst.remove(elem)
    [lst.insert(int(elem[-1]), elem[:len(elem) - 1]) for elem in toAdd]

    return lst

first = ['Cara20130716', 'Tara20080601', 'PALA19961231', 'Melo19601023']
secnd = ['PALA', 'CARA', 'Tara']
print codes(first, secnd)

输出:

['Cara20130716', ['Tara', '01', '06', '2008'], ['PALA', '31', '12', '1996'], 'Melo19601023']

解决方案#2:

如果您希望匹配不区分大小写。

repl.it

上的演示

代码:

def codes(lst, cods):

    for ind, cod in enumerate(cods):
        cods[ind] = cod.lower()
    toAdd = []
    c = 0
    for ind, elem in enumerate(lst):
        if elem[:4].lower() not in cods:
            toAdd.append(elem + str(ind+c))
            lst.remove(elem)
            c += 1
    for ind, elem in enumerate(lst):
        tmp = []
        tmp.append(elem[:4])
        tmp.append(elem[10:])
        tmp.append(elem[8:10])
        tmp.append(elem[4:8])
        lst.insert(ind, tmp)
        lst.remove(elem)
    [lst.insert(int(elem[-1]), elem[:len(elem) - 1]) for elem in toAdd]

    return lst

first = ['Cara20130716', 'Tara20080601', 'PALA19961231', 'Melo19601023']
secnd = ['PALA', 'CARA', 'Tara']
print codes(first, secnd)

输出:

[['Cara', '16', '07', '2013'], ['Tara', '01', '06', '2008'], ['PALA', '31', '12', '1996'], 'Melo19601023']